자바 프로그램은 main()메소드의 시작 중괄호 {에서끝 중괄호}까지 위에서부터 아래로 실행하는 흐름을 가진다.
실행하는 흐름을 바꿀 수 있도록 해주는 것을 흐름 제어문 혹은 제어문이라고 합니다.
- 조건문 : 조건식에 따라 다른 실행문을 실행
- 조건문의 종류
- if문, if else문, else if문 : 조건식의 결과가 true, false에 따라
- switch문 : 변수의 값에 따라
조건식의 결과에 따라 블록 실행 여부가 결정
조건식에는 연산식이나 boolean타입 변수가 올 수 있다.
조건식이 true이면 블록이 실행되고, false이면 블록이 실행되지 않는다.
조건식이 true가 될 때 실행해야 할 문장이 하나라면 중괄호 블록{}은 생략 가능
if문 형태
if(조건식) {
실행문A
}
실행문B
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문과는 상관 없는 실행문
}
}
위 코드의 출력 결과는
점수가 90보다 큽니다.
등급은 A등급입니다.
등급은 B등급입니다.
3줄이 출력된다. 마지막 등급은 B등급입니다.은 두 번째 if문과는 상관 없이 출력된다. 그 이유는 두 번째if문에서 중괄호를 생략 했기 때문이다.
조건식의 결과에따라 실행 블록을 선택
조건식이 true이면 if문 블록이 실행되고 false이면 else 블록이 실행된다.
조건식의 결과에 따라 if블록과 else블록 중 어느 한 블록의 내용만 실행하고 전체 if문을 벗어난다.
if else 형태
if(조건식1) {
실행문A
} else {
실행문B
}
실행문C
if else 예
public class IfElseExample {
public static void main(String[] args) {
int score = 85;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.");
System.out.println("등급은 A입니다.");
} else { // score < 90 경우 실행
System.out.println("점수가 90보다 작습니다.");
System.out.println("등급은 B입니다.");
}
}
}
조건문이 여러 개인 if문
처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택, if 블록의 끝에 else if문을 붙인다.
else if문의 수는 제한이 없으며 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어난다.
else if블록의 마지막에는 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else블록을 실행하고 if문을 벗어난다.
else if문 형태
if(조건식1) {
실행문A
} else if(조건식2) {
실행문B
} else {
실행문C
}
실행문D
else if문 예
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 { // score < 70일 경우 실행
System.out.println("점수가 70점 미만 입니다.");
System.out.println("등급은 D입니다.");
}
}
}
로또 번호 뽑기
Math.random()메서드를 활용한다.
이 메서드는 0.0과 1.0사이에 속하는 double타입의 난수를 하나 리턴한다.
범위는 0.0은 범위에 포함하고 1.0은 범위에 포함하지 않는다.
0.0 <= Math.random() < 1.0
// 1 부터 45까지 난수를 출력할려면
int num1 = (int)(Math.random() * 45) + 1;
// 주사위 번호 출력
int num2 = (int)(Math.random() * 6) + 1;
조건 제어문으로 변수의 값에 따라 실행문이 결정된다.
변수의 값과 동일한 값을 갖는 case가 없다면 default로 가서 실행된다.
default는 생략이 가능하다.
case 끝에 break가 붙어 있는 이유는 다음 case를 실행하지 않고 switch문을 빠져나가기 위해서 이다.
break가 없다면 다음 case가 연달아 실행되는데, 이때는 case값과는 상관없이 실행된다.
switch문 형태
switch(변수) {
case 값1:
실행문A
break;
case 값2:
실행문B
break;
case 값3:
실행문C
break;
default:
실행문D
}
switch문 예1(break문 있음)
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번이 나왔습니다.");
}
}
}
switch문 예2(break문 없음)
public class SwitchNoBreakCaseExample {
public static void main(String[] args) {
// (int)(0.0 + 8) <= random < (int)(4.0 + 8) => 8 <= random <12
int time = (int)(Math.random() * 4) + 8;
System.out.println("현재 시간 " + time + "시" );
switch (time) {
case 8:
System.out.println("출근합니다.");
case 9:
System.out.println("회의합니다.");
case 10:
System.out.println("업무를 봅니다.");
default:
System.out.println("외근을 나갑니다.");
}
}
}
- 반복문 : 어떤 작업이 반복적으로 실행되도록 할 때 사용
- 반복문의 종류
- for문
- while문
- do-while문
=> for문은 반복 횟수를 알고 있을 때 주로 사용, while문은 조건에 따라 반복할 때 주로 사용
=> while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐의 차이
for문 형태
for(초기화식; 조건식; 증감식) {
실행문;
}
for문 예
public class ForSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1 ~ 100 합: " + sum); // 5050
}
}
중첩 for문 예
public class ForMultiplicationTableExample {
public static void main(String[] args) {
for(int m = 2; m <= 9; m++) {
System.out.println("*** " + m + "단 ***");
for(int n = 1; n <= 9; n++) {
System.out.println(m + " x " + n + " = " + (m * n));
}
System.out.println();
}
}
}
조건식이 true일 경우 계속해서 반복
비교 또는 논리 연산식이 주로 오고 조건식이 false가 되면 반복 행위를 멈추고 while문 종료
while문 형태
while(조건식) {
실행문;
}
while문 예
public class WhileSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i <= 100) {
sum += i;
i++;
}
System.out.println("1부터 " + (i-1) + "까지의 합 : " + sum);
}
}
do-while문 예
public class WhileSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
// do-while문
do {
sum += i;
i++;
} while(i <= 100);
System.out.println("1부터 " + (i-1) + "까지의 합 : " + sum);
}
}
while문(break문 있음)
public class BreakExample {
public static void main(String[] args) {
while(true) {
// 1 ~ 6까지 범위에서 나오는 랜덤 수
int num = (int) (Math.random() * 6) + 1;
System.out.println(num);
if (num == 6) {
break;
}
}
System.out.println("프로그램 종료");
}
}
바깥쪽 반복문 종료(반복문 중첩 시)
public class BreakOutterExample {
public static void main(String[] args) {
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문 실행 시 for문은 증감식으로 while문과 do-while문은 조건식으로 이동한다.
if문과 같이 사용되는데, 특정 조건을 만족하는 경우에 continue문을 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다.
continue문 예
public class ContinueExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i%2 != 0) { // 홀수 일 때
continue;
}
System.out.println(i);
}
}
}