if 문은 조건식의 결과에 다라 블록 실행 여부가 결정된다. 다음은 if 문의 실행 흐름을 보여준다.
조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나 boolean 변수가 올 수 있다.
조건식이 true이면 블록을 실행하고, false 이면 블록을 실행하지 않는다.
중괄호 {}
블록 내에 실행문이 하나밖에 없다면 중괄호를 생략할 수 있지만, 버그가 발생할 수 있기 때문에 되도록 작성하는 것을 추천한다.
package ch04.sec02;
public class IfExample {
public static void main(String[] args) {
int score = 93;
if(score >= 90) {
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A입니다.");
}
if(score < 90)
System.out.println("점수가 90보다 작습니다.");
System.out.println("등급은 B입니다.");
}
}
if 의 조건문이 true이면 if문 블록이 실행되고, false 이면 else 블록이 실행된다.
package ch04.sec02;
public class IfElseExample {
public static void main(String[] args) {
int score = 85;
if(score >= 90) {
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A입니다.");
} else {
System.out.println("점수가 90보다 작습니다.");
System.out.println("등급은 B입니다.");
}
}
}
조건문이 여러개인 if문도 있다. else if는 상위 조건식이 false 일 경우 평가되고, else if 가 true 이면 해당 블록이 실행된다.
여러 조건식 중 true 가 되는 else if 블록만 실행하고 전체 if 문을 벗어난다.
package ch04.sec02;
public class IfElseIfElseExample {
public static void main(String[] args) {
int score = 75;
if(score >= 90) {
System.out.println("점수가 100~90입니다.");
System.out.println("등급은 A입니다.");
} else if(score >= 80){
System.out.println("점수가 80~89입니다.");
System.out.println("등급은 B입니다.");
} else if(score >= 70){
System.out.println("점수가 70~79입니다.");
System.out.println("등급은 C입니다.");
} else {
System.out.println("점수가 70 미만입니다.");
System.out.println("등급은 D입니다.");
}
}
}
if문은 조건식의 결과가 true, false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 else if를 반복적으로 추가해야 하므로 코드가 복잡해진다.
그러나 switch 문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if 문보다 코드가 간결해진다.
switch 문은 괄호 안의 변수값에 따라 해당 case 로 가서 실행문을 실행시킨다. 만약 변수값과 동일한 값을 갖는 case 가 없으면 default 로 가서 실행문을 실행시킨다.
case 끝에 있는 break는 다음 case를 실행하지 않고 switch 문을 빠져나가기 위해 필요하다.
package ch04.sec03;
public class SwitchExample {
public static void main(String[] args) {
int num = (int)(Math.random() * 6) + 1;
switch(num) {
case 1:
System.out.println("1번이 나왔습니다.");
break;
case 2:
System.out.println("2번이 나왔습니다.");
break;
case 3:
System.out.println("3번이 나왔습니다.");
break;
case 4:
System.out.println("4번이 나왔습니다.");
break;
case 5:
System.out.println("5번이 나왔습니다.");
break;
default:
System.out.println("6번이 나왔습니다.");
}
}
}
Java 12 이후부터는 switch 문에서 표현식을 사용할 수 있다.
break 문을 없애는 대신에 화살표와 중괄호를 사용해 가독성이 좋아졌다.
package ch04.sec03;
public class SwitchValueExample {
public static void main(String[] args) {
String grade = "B";
int score1 = 0;
switch(grade) {
case "A" -> {
score1 = 100;
}
case "B" -> {
int result = 100 - 20;
score1 = result;
}
default -> score1 = 60;
}
System.out.println("score1: " + score1);
int score2 = switch(grade) {
case "A" -> 100;
case "B" -> {
int result = 100 - 20;
yield result;
}
default -> 60;
};
System.out.println("score2: " + score2);
}
}
프로그램을 작성하다 보면 똑같은 실행문을 반복적으로 실행하야 할 경우가 많이 발생한다.
for 문은 사용한다면 반복되는 코드에 대해 중복을 획기적으로 줄일 수 있다.
package ch04.sec04;
public class PrintFrom1To10Example {
public static void main(String[] args) {
for(int i = 1; i<=10; i++) {
System.out.print(i + " ");
}
}
}
for 문을 작성할 때 주의할 점은 초기화식에서 부동 소수점을 쓰는 float 타입을 사용하지 말아야 한다는 것이다.
부동 소수점 방식의 float는 연산 과정에서 수를 정확히 표현하지 못하기 때문에 반복 횟수에 차이가 날 수 있다.
package ch04.sec04;
public class FloatCounterExample {
public static void main(String[] args) {
for(float x=0.1f; x<=1.0f; x+=0.1f) {
System.out.println(x);
}
}
}
for 문이 정해진 횟수만큼 반복한다면, while 문은 조건식이 true 일 경우에 계속해서 반복하고, false가 되면 반복을 멈추고 while 문을 종료한다.
package ch04.sec05;
public class PrintFrom1To10Example {
public static void main(String[] args) {
int i = 1;
while( i<= 10) {
System.out.print(i + " ");
i++;
}
}
}
while 문은 시작할 때부터 조건식을 평가하여 블록 내부를 실행할지 경정하지만, 경우에 따라서는 블록 내부를 먼저 실행시키고, 실행 결과에 따라서 반복 실행을 계속할지 결정하는 경우도 있다.
이때 do-while 문을 사용하면 적어도 1번은 블록 내부를 실행할 수 있다.
package ch04.sec06;
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
System.out.println("메시지를 입력하세요.");
System.out.println("프로그램을 종료하려면 q를 입력하세요.");
Scanner scanner = new Scanner(System.in);
String inputString;
do {
System.out.print(">");
inputString = scanner.nextLine();
System.out.println(inputString);
}while( ! inputString.equals("q") );
System.out.println();
System.out.println("프로그램 종료");
}
}
break 문은 반복문을 실행 중지하거나 조건문인 switch 문을 종료할 때 사용한다.
break 문은 대개 if 문과 같이 사용되어 조건식에 따라 for 문과 while 문을 종료한다.
package ch04.sec07;
public class BreakExample {
public static void main(String[] args) {
while(true) {
int num = (int)(Math.random() * 6) + 1;
System.out.println(num);
if(num == 6) {
break;
}
}
System.out.println("프로그램 종료");
}
}
만약 반복문이 중첩되어 있을 경우 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 레이블을 사용하면 된다.
package ch04.sec07;
public class BreakOutterExample {
public static void main(String[] args) throws Exception {
Outter: for(char upper='A'; upper<='Z'; upper++) {
for (char lower='a'; lower<='z'; lower++) {
System.out.println(upper + "-" + lower);
if(lower=='g') {
break Outter;
}
}
}
System.out.println("프로그램 실행 종료");
}
}
continue 문은 반복문에서만 사용되는데, 블록 내부에서 continue 문이 실행되면 그 이후 코드는 실행되지 않고 다음 반복을 수행하게 된다.
package ch04.sec08;
public class ContinueExample {
public static void main(String[] args) throws Exception{
for(int i=1; i<=10; i++) {
if(i%2 != 0) {
continue;
}
System.out.print(i + " ");
}
}
}
- 조건문과 반복문에 대해 잘못 설명한 것은 무엇입니까?
➊ if 문은 조건식의 결과에 따라 실행 흐름을 달리할 수 있다.
➋ switch 문에서 사용할 수 있는 변수의 타입은 int, double이 될 수 있다.
➌ for 문은 카운터 변수로 지정한 횟수만큼 반복시킬 때 사용할 수 있다.
➍ break 문은 switch 문, for 문, while 문을 종료할 때 사용할 수 있다.
- 답 : ➋
- 왼쪽 switch 문을 Expression(표현식)으로 변경해서 오른쪽에 작성해보세요.
String grade = "B"; int score1 = 0; swtich (grade) { case "A": score1 = 100; break; case "B": int result = 100 - 20; score1 = result; break; default: score1 = 60; }
- 답
String grade = "B"; int score1 = swtich (grade) { case "A"-> { score1 = 100; } case "B" -> { int result = 100 - 20; yield result; } default -> 60; }
- for 문을 이용해서 1부터 100까지의 정수 중에서 3의 배수의 총합을 출력하는 코드를 작성해보세요.
- 답
int sum = 0; for(int i=1; i<10; i++) { if(i%3 == 0) { sum += i; } } System.out.println(sum);
- while 문과 Math.random() 메소드를 이용해서 두 개의 주사위를 던졌을 떄 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를작성해보세요. 눈의 합이 5가 되는 경우는 (1, 4), (4, 1), (2, 3), (3. 2) 입니다.
while(true) { int num1 = (int)(Math.random() * 6) + 1; int num2 = (int)(Math.random() * 6) + 1; System.out.println("(" + num1 + ", " + num2 + ")"); if( (num1 + num2) == 5) { break; } }
- 중첩 for 문을 이용하여 방정식 4x + 5y = 60 의 모든 해를 구해서 (x, y) 형태로 출력하는 코드를 작성해보세요. 단, x와 y는 10 이하의 자연수입니다.
for(int x=1; x<= 10; x++) { for(int y= 1; y<=10; y++) { if( (4*x + 5*y) = = 60) { System.out.println("(" + x + ", " + y + ")"); } } }
- for 문을 이용해서 다음과 같은 실행 결과가 나오는 코드를 작성해보세요.
* ** *** **** *****
- 답 :
int cnt = 1; for (int i=0; i<5; i++) { for(int starNum=1; starNum <=cnt; starNum++) { System.out.print("*"); } System.out.println(); cnt++; }
- whille 문과 Scanner의 nextLine() 메소드를 이용해서 다음 실행 결과와 같이 키보드로부터 입력된 데이터로 예금, 출금, 조회, 종료 기능을 제공하는 코드를 작성해보세요.
---------------------------------- 1.예금 | 2.출금 | 3.잔고 | 4.종료 ---------------------------------- 선택> 1 예금액>10000 ---------------------------------- 1.예금 | 2.출금 | 3.잔고 | 4.종료 ---------------------------------- 선택> 2 출금액>2000 ---------------------------------- 1.예금 | 2.출금 | 3.잔고 | 4.종료 ---------------------------------- 선택> 3 잔고>8000 ---------------------------------- 1.예금 | 2.출금 | 3.잔고 | 4.종료 ---------------------------------- 선택> 4 프로그램 종료
- 답 :
import java.util.Scanner; public class ch4_7 { public static void main(String[] args) { boolean run = true; int balance = 0; Scanner scanner = new Scanner(System.in); while(run) { System.out.println("-------------------------------------"); System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료"); S ystem.out.println("-------------------------------------"); System.out.print("선택> "); int menuNum = scanner.nextInt(); switch(menuNum) { case 1: System.out.print("예금액> "); balance += scanner.nextInt(); break; case 2: System.out.print("출금액> "); balance -= scanner.nextInt(); break; case 3: System.out.print("잔고> "); System.out.println(balance); break; case 4: run = false; break; } System.out.println(); } System.out.println("프로그램 종료"); } }