main()메소드의 시작 중괄호{에서 끝 중괄호}까지 위에서부터 아래로 실행하는 흐름을 가지고 있다.
{} 블록| 조건문 | 반복문 |
|---|---|
| if문, switch문 | for문, while문, do-while문 |
제어문 블록이 실행 완료된 후,
제어문 블록 내부에 또 다른 제어문을 사용할 수 있다.
if (조건식) {
// 조건식이 true일 경우 실행되는 블록
// 실행문이 하나일 경우 중괄호 생략 가능
}
조건식의 결과에 따라 블록 실행 여부가 결정된다.
true/false가 산출되는 연산식, boolean 변수중괄호 { } 블록을 생략하지 않고 작성하는 것을 추천한다.
if (조건식) {
// 조건식이 true일 경우 실행
} else {
// 조건식이 false일 경우 실행
}

else if는 상위 조건식이 false일 경우 평가된다.else if의 수는 제한이 없다. true가 되는 else if 블록만 실행하고 전체 if문을 벗어난다.false일 경우 else 블록을 실행하고 if문을 벗어난다.if (조건식 1) {
// 조건식1이 true일 경우 실행
} else if (조건식 2) {
// 조건식1이 false && 조건식2가 true
} else {
// 조건식 1 및 2가 false
}

중첩의 단계는 제한이 없다.
if (조건식1) {
// 조건식1이 true
if (조건식2) {
// 조건식1 및 2가 true
} else {
// 조건식1이 true, 조건식2는 false
}
} else {
// 조건식1이 false
}
변수의 값에 따라서 실행문이 결정된다.
defalut는 생략 가능하다.
switch문의 괄호에는 정수타입(byte, char, short, int, long)과 문자열 타입(String) 변수를 사용할 수 있다.
char grade = 'B';
int score = 0;
switch (grade) {
case 'A':
case 'a':
score = 100;
break;
case 'B':
case 'b':
score = 100 - 20;
break;
default:
score = 60;
}
switch문에 Expressions(표현식)을 사용할 수 있다.char grade = 'B';
int score = 0;
switch (grade) {
case 'A','a' -> score = 100;
case 'B','b' -> score = 100 - 20;
default -> score = 60;
}
char grade = 'B';
int score = switch (grade) {
case 'A','a' -> 100;
case 'B','b' -> {
int result = 100 - 20;
// java 13부터 가능
yield result;
}
default -> 60;
}
똑같은 실행문을 반복적으로 실행해야 할 경우에 사용한다.
정해진 횟수만큼 반복한다.
int sum = 0;
for (int i=0; i<=100; i++) {
sum += i;
}
다음은 for문의 실행 흐름을 도식화한 것이다.

조건식, 실행문, 증감식, 조건식 ...을 반복하다가 조건식이 false이면 for문을 종료한다.
초기화식에서 선언된 변수는 for문 블록 안에서만 사용되는 로컬 변수이다.
- for문 작성 시 주의점
초기화식에서 부동 소수점을 쓰는float타입을 사용하지 말아야 한다.
for문 안에 또 다른 for문을 내포할 수 있다.
이를 중첩된 for문이라고 한다.
바깥 for문이 한번 실행될 때마다 중첩된 for문은 지정된 횟수만큼 반복하고 다시 바깥 for문으로 돌아간다.
// 구구단 출력
for (int i=2; i<10; i++) {
System.out.println("***" + i + "단***");
for (int j=1; j<10; j++) {
System.out.println(i + " X " + j + " = " + i*j);
}
}
true일 경우에 계속해서 반복하고, false가 되면 반복을 멈추고 while문을 종료한다.
int i = 1;
while (i <= 10) {
System.out.println(i + " ");
i++;
}

Scanner sc = new Scanner(System.in);
System.out.println("메시지를 입력하세요.");
System.out.println("종료하려면 q를 입력하세요.");
String inputStr;
do {
System.out.print(">");
inputStr = sc.nextLine();
System.out.println(inputStr);
} while (!inputStr.equals("q"));
반복문이 중첩되어 있을 경우
break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다.
중첩 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(Lable)을 붙이고, break Label;을 사용하면 된다.
Outter: for (int i=1; i<10; i++) {
for(int j=1; j<10; j++) {
System.out.println(i + " X " + j + " = " + i*j);
if (j==4) {
break Outter;
}
}
}

// 홀수만 출력
for (int i=1; i<10; i++) {
if (i%2 == 0) {
continue;
}
System.out.print(i + " ");
}