04.제어문
Last updated -
2023년 03월 11일
Edit Source
해당 게시글은 Do it! 자바 프로그래밍 입문 교재를 정리한 내용입니다.
# Chapter 04 - 자바의 제어문
# Java 조건문
# Java if문
1
2
3
4
5
6
7
8
9
10
11
| if (조건식1) {
수행문1;
}
else if (조건식2) {
수행문2;
}
else {
수행문3;
}
|
- if문 내부 수행하는 문장이 1개면 중괄호
{}
없어도 됨. 하지만, 코드 가독성이 좋게 하려면 쓰는 것을 추천
# Java switch-case문
1
2
3
4
5
6
7
8
9
10
11
12
13
| switch(조건) {
case 값1 : 수행문1;
break;
case 값2 : 수행문2;
break;
case 값3 : 수행문3;
break;
default : 수행문4;
// 주어진 값이 case에 해당하지 않을 시 default 실행
}
|
case문 동시 사용
1, 3, 5, 7, 8, 10, 12월은 31일 까지
4, 6, 9, 11월은 30일 까지
2월은 28일 까지
1
2
3
4
5
6
7
8
| case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : day = 31;
break;
case 4 : case 6 : case 9 : case 11 : day = 30;
break;
case 2 : day = 28;
break;
|
1
2
3
| if (medal.equals("Gold")) {
...
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| package chapter04;
public class pr04_SwitchCase2 {
public static void main(String[] args) {
String medal = "Gold";
switch(medal) {
case "Gold":
System.out.println("금메달입니다.");
break;
case "Silver":
System.out.println("은메달입니다.");
break;
case "Bronze":
System.out.println("동메달입니다.");
break;
default:
System.out.println("메달이 없습니다.");
break;
}
}
}
|
# Java 반복문
# while문
1
2
3
4
5
6
7
8
9
| while(조건식) {
수행문1;
// 조건식 참이면 수행
}
// 무한루프
while(true) {
수행문2;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| package chapter04;
public class pr05_WhileExample1 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while (num <= 10) {
sum += num;
num++;
}
System.out.println("1부터 10까지의 합 = " + sum);
}
}
|
# do-while문
1
2
3
4
5
6
| // 수행문1을 일단 1번 실행, 그 이후 while 조건식 참이면 실행
do {
수행문1;
...
} while (조건식);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| package chapter04;
public class pr06_DoWhileExample {
public static void main(String[] args) {
int num = 1;
int sum = 0;
do {
sum += num;
num++;
} while(num <= 10);
System.out.println("1부터 10까지의 합 = " + sum);
}
}
|
# for문
1
2
3
| for (int i = 0; i <= 10; i++) {
수행문~
}
|
# for문 요소 생략하기
초기화식 생략
- 이미 변수 초기화 해서 중복으로 초기화할 필요 없을 때
1
2
3
4
5
| int i = 0;
for ( ; i < 5; i++) {
...
}
|
조건식 생략
1
2
3
4
| for (i = 0; ; i++) {
sum += i;
if (sum > 200) break;
}
|
증감식 생략
- 증감식 연산이 복잡하거나 다른 변수의 연산 결과 값에 좌우될 때
1
2
3
4
| for ( i = 0; i < 5; ) {
...
i = (++i) % 10;
}
|
요소 모두 생략
1
2
3
| for ( ; ; ) {
// 무한루프
}
|
구현 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| package chapter04;
public class pr07_forExample {
public static void main(String[] args) {
// 초기화식 생략
int i = 0;
for ( ; i < 5; i++) {
System.out.println("초기화식 생략 예제 " + "반복횟수 = " + i);
}
// 조건식 생략
int j;
int sum = 0;
for ( j = 0; ; j++ ) {
sum += j;
System.out.println("조건식 생략 예제 더하는 중, 반복횟수 = " + j);
if (sum > 200) break;
}
System.out.println("조건식 생략 예제 끝난 후 합 = " + sum);
// 증감식 생략
for (int k = 0; k < 5; ) {
k = (++k) % 10;
System.out.println(k);
}
// 요소 모두 생략
// for ( ; ; ) {
// 무한루프 입니다.
// }
}
}
|
# continue문
continue문은 반복문과 함께 씀
반복문 안에서 continue문 만나면 이후 문장 수행 X
그 이후 for문 처음으로 돌아가서 증감식 수행
사용 용도 : 반복문 수행 중 특정 조건에서는 수행하지 않고 건너뛰고 싶을 때
1
2
3
4
5
6
7
8
9
10
11
12
| package chapter04;
public class pr09_ContinueExample {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if ( i % 2 == 0 ) continue;
sum += i;
}
System.out.println("1부터 100까지 홀수의 합은 = " + sum);
}
}
|
# break문
실제로 어디에 사용하냐를 보이겠음. 0부터 시작해서 숫자를 1씩 늘리면서 합을 계산할 때 숫자를 몇까지 더하면 100이 넘는지 알고 싶다고 하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| package chapter04;
public class pr10_BreakExample1 {
public static void main(String[] args) {
int sum = 0;
int num = 0;
for (num = 0; sum < 100; num++) {
sum += num;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}
// num : 15
// sum : 105
|
num이 아닌 sum의 조건에 따라 코드가 진행되다 보니, num이 증감된 상태에서 sum의 조건을 만나 올바르지 않은 답이 나오는 것을 볼 수 있음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| package chapter04;
public class pr11_BreakExample2 {
public static void main(String[] args) {
int sum = 0;
int num = 0;
for (num = 0; ; num++) {
sum += num;
if (sum >= 100)
break;
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}
// num : 14
// sum : 105
|
조건식 생략의 스킬을 이용하였고 for문 내부에 조건을 걸어줌으로써 break 시켜서 반복문을 아예 빠져나가게 했음
1
2
3
4
5
6
| while(조건식1) {
while(조건식2) {
if (조건식) // 조건에 해당하는 경우
break; // 내부 반복문만 빠져나옴
}
}
|
중첩 반복문을 사용하는 경우 break를 사용하면 해당 반복문만 빠져나온다. 즉, 내부 반복문만 빠져나오고 외부 반복문은 계속 수행한다.
# break, continue 차이
break문은 break; 를 적어준 곳에서 해당 조건문 블록과 그 밖의 반복문 자체를 탈출한다.
continue문은 해당 조건문 블록을 탈출하여 아래 명령문은 실행하지 않고, 다음 반복문 실행절차를 수행한다.
# 연습문제 2번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| package chapter04;
public class ex02_Q2 {
public static void main(String[] args) {
int dan, times;
// 내가 짠 코드
// for (dan = 1; dan <= 9; dan++) {
// for (times = 1; times <= 9; times++) {
// if (dan % 2 == 0) {
// System.out.println(dan + " X " + times + " = " + (dan * times));
// }
// }
// System.out.println();
// }
// 정답 코드
for (dan = 1; dan <= 9; dan++) {
if (dan % 2 != 0) continue;
for (times = 1; times <= 9; times++) {
System.out.println(dan + " X " + times + " = " + (dan * times));
}
System.out.println();
}
}
}
|
내가 짠 코드는 결국 두번째 for문까지 와서 일단 다 돌려야 한다.
하지만 정답 코드는 continue문을 이용해서 홀수면 밑에 for문을 수행하지 않고 바로 다음 반복문으로 넘어가도록 설계했기 때문에 더 좋은 코드이다.
# 연습문제 3번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| package chapter04;
public class ex03_Q3 {
public static void main(String[] args) {
int dan, times;
// 내가 짠 코드
// for (dan = 1; dan <= 9; dan++) {
// for (times = 1; times <= dan; times++) {
// System.out.println(dan + " X " + times + " = " + (dan * times));
// }
// System.out.println();
// }
// 정답 코드
for (dan = 1; dan <= 9; dan++) {
for (times = 1; times <= 9; times++) {
if (dan < times) break;
System.out.println(dan + " X " + times + " = " + (dan * times));
}
System.out.println();
}
}
}
|
이건 내가 짠 코드대로 짤 것 같은데 정답코드처럼 break 문을 이용할 수도 있다. 이건 내가 적은 방법이 더 좋은듯
연습문제 4번, 5번은 백준 별찍기 5번, 7번이니까 그거 참조