[4주차 과제] 제어문
[TOC]
1. 선택문
2. 반복문
0. 코드 실행 흐름 제어
-
자바 프로그램을 시작하면. main() 메소드의 시작 중괄호 { 에서 시작하여 끝 중괄호 } 까지 위에서 아래로 실행하는 흐름을 가짐
-
이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이 흐름 제어문 (= 제어문)
제어문
- 조건식 + 중괄호 {} 블록
- 조건식의 연산 결과에 따라 블록 내부의 실행 여부가 결정됨
제어문의 종류
1. 조건문
- if문, switch문
- 제어문 블록이 실행 완료된 경우, 제어문 블록을 빠져나와 정상 흐름으로 다시 돌아옴
2. 반복문
- for문, while문, do-while문
- 제어문 블록이 실행 완료된 경우, 제어문 처음으로 다시 되돌아가 반복 실행함
제어문 블록 내부에는 또 다른 제어문을 사용 가능
- if문 내부에 for문, while문을 가질 수 있음
- 개발자가 원하는 복잡한 흐름 제어 가능
1. 선택문
1.1 if문
조건식의 결과에 따라 블록 실행 여부가 결정
- 조건식이 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 변수가 올 수 있음
- 조건식이 true이면 블록을 실행하고 false면 블록을 실행하지 않음
if문 예시
if (조건식) {
실행문;
실행문;
}
1.2 if-else문
- if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택
- if문의 조건식이 true이면 if문의 블록이 실행되고, 조건식이 false이면 else 블록이 실행됨
if-else문 예제
public class IfElseExample {
public static void main(String[] args) {
int score = 90;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.");
} else {
System.out.println("점수가 90보다 작습니다.");
}
}
}
1.3 if-else if-else문
- 조건이 여러 개인 if문의 경우 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택할 수 있는데, if 블록의 끝에 else if문을 붙이면 됨
- else if문의 개수는 제한이 없고 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 if문을 벗어남
- else if블록의 마지막에는 else 블록을 추가할 수 있는데, 모든 조건식이 false일 경우 else 블록을 실행하고 if문을 벗어남
if-else if-else문 예제
public class IfElseIfElseExample {
public static void main(String[] args) {
int score = 90;
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.");
} else if (score >= 80) {
System.out.println("점수가 80 ~ 89입니다.");
} else if (score >= 70) {
System.out.println("점수가 70 ~ 79입니다.");
} else {
System.out.println("점수가 70미만 입니다.");
}
}
}
1.4 중첩 if문
if문의 블록 내부에 또 다른 if문을 사용하는 것
- 중첩의 단계는 제한이 없음
중첩 if문 예제
public class IfNestedExample {
public static void main(String[] args) {
int score = 90;
String grade;
if (score >= 90) {
if (score >= 95) {
grade = "A+";
} else {
grade = "A";
}
} else if (score >= 80) {
if (score >= 85) {
grade = "B+";
} else {
grade = "B";
}
} else if (score >= 70) {
if (score >= 75) {
grade = "C+";
} else {
grade = "C";
}
} else {
grade = "D";
}
}
}
1.5 switch문
변수가 어떤 값을 갖느냐에 따라 실행문이 선택되는 조건 제어문
- if문은 조건식이 true일 경우에 블록 내부의 실행문을 실행함
- switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행시킴
- 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킴
- default는 생략 가능
switch문 예제
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;
case default:
System.out.println("6번이 나왔습니다.");
break;
}
}
- case 끝에 break가 붙어있는 이유
- 다음 case를 실행하지 말고 switch문을 빠져나가기 위함
- break가 없으면 다음 case 값과는 상관없이 연달아 실행됨
2. 반복문
어떤 코드들이 반복적으로 실행되도록 할 때 사용됨
반복문의 종류
- for문
- while문
- do-while문
- for문과 while문은 서로 변환이 가능
- for문
- 주로 반복 횟수를 알고 있는 경우 사용
- while문
- 주로 조건에 따라 반복할 때 사용
- do-while문
- 반복문 내 실행문을 먼저 최초 1회 실행하고 조건에 따라 반복
2.1 for문
주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문
- 아래 코드는 1부터 5까지의 합을 구하는 코드
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5;
-
이렇게 작성한다면, 코드 양이 엄청 늘어난다.
-
for문을 이용하면, 1부터 100까지의 합도 쉽게 구할 수 있음
int sum = 0; for (int i=1; i<=100; i++) { sum = sum + i; }
- for문이 한 번 작성된 실행문을 여러번 반복 실행해주므로 코드가 간결해짐
작성 방법
for (1. 초기화식; 2. 조건식; 4. 증감식) {
3. 실행문; (2. 조건식이 true이면 3. 실행)
}
5. 실행문 (2.조건식이 false이면 5. 실행)
for문 예제
- 0부터 9까지 출력
for (int i=0; i<10; i++) {
System.out.println(i);
}
2.2 while문
조건식이 true일 경우에 계속해서 반복
작성 방법
while (1. 조건식) {
2. 실행문; (1. 조건식이 true이면 2. 실행)
}
3. 실행문 (1.조건식이 false이면 반복문을 빠져나와 3. 실행)
while문 예제
- 1부터 100까지의 합 구하기
public class WhileSumFrom1To100Example{
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i<=100) {
sum += i;
i++;
}
}
}
- while문 내에서 계속 누적되는 값을 갖는 변수는 while문 시작 전에 미리 선언해두어야 함
2.3 do-while문
조건식에 의해 반복 실행한다는 점은 while문과 동일, 대신 do-while문은 실행문을 최초 실행 후에 조건식에 따라 반복한다는 점에 차이가 있음
작성 방법
do {
1. 실행문; (1. 우선 실행, 2.조건식이 true인 경우 반복 실행)
} while (2. 조건식);
3. 실행문 (2.조건식이 false이면 반복문을 빠져나와 3. 실행)
do-while문 예제
- q를 입력할 때 까지 반복
public class DoWhileExample{
public static void main(String[] args) {
System.out.println("메시지를 입력하세요, 프로그램을 종료하려면 q를 입력하세요.");
Scanner scanner = new Scanner(System.in);
String input;
do {
System.out.print("입력 : ");
input = scanner.nextLine();
System.out.println(input);
} while (input.equals("q"));
System.out.println("프로그램 종료");
}
}
2.4 break문
반복문을 실행 중지할 때 사용
- break문을 만나면, 반복문을 빠져나감
break로 while문 종료 예제
- num이 6인 경우 반복문 종료
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("프로그램 종료");
}
}
반복문이 중첩되어 있을 경우, break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않음
- 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고,
break 이름;
을 해야함
2.5 continue문
반복문 블록 내부에서 continue문이 실행되면 반복문의 조건식으로 이동
반복문을 종료하지 않고 계속 반복을 수행한다는 점이 break문과 다름
continue문 예제
public class ContinueExample{
public static void main(String[] args) {
for (int i=1; i<=10; i++) {
if (i % 2 ==0){
continue;
}
}
}
}
출처
- 이것이 자바다 - 신용권의 Java 프로그래밍 정복 [한빛미디어]