◻️ DAY-08
챕터 | 반복문 |
---|---|
4-1 | 반복문 |
◻️ 반복문이란?
1부터 10까지 더하여 그 합을 계산해보기
1
2
3
4
5
6
7
8
9
10
int num = 1;
num += 2;
num += 3;
num += 4;
num += 5;
num += 6;
num += 7;
num += 8;
num += 9;
System.out.println("1부터 10까지의 합은" + num + "입니다");
- 위와 같은 반복에 대해 효율적으로 프로그래밍 하기 위해
반복문
을 사용할 수 있다반복문
의 종류에는while
문,do-while
문,for
문 세 가지가 있다.
◻️ While 문
while
문은 조건식이 참인 동안{ }
안의 수행문을 반복해서 수행한다.- 위에서 작성했던 1부터 10까지 더하는 프로그램을 while 문으로 만들면 다음과 같다.
✔ 조건: 1부터 10까지 숫자가 커지는 동안
✔ 수행: 1씩 증가한 숫자를 더하는 작업
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 반복문 만들기
* ------------------------------
* while 문을 이용하여 1부터 10까지의 합 구하기
*/
package section_04.loop;
public class loop1_1 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while (num <= 10) { // num 값이 10보다 작거나 같을 동안
sum += num; // sum에 num을 더하고
num++; // num에 1씩 더해 나간다
}
System.out.println("1부터 10까지의 합은" + sum +" 입니다");
}
}
- Q. While문을 사용해 1부터 50까지 더하는 코드를 만들어보세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 반복문 만들기
* ------------------------------
* while 문을 이용하여 1부터 50까지의 합 구하기
*/
package section_04.loop;
public class loop1_2 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while (num <= 50) {
sum += num;
num++;
}
System.out.println("1부터 50까지의 합은" + sum + "입니다.");
}
}
◻️ do-while문 (While 문이 무한히 반복되는 경우)
- 웹 서버처럼 끊임없이 돌아가는 시스템을
데몬(daemon)
이라고 부른다 데몬 서비스
를 구현할 때 무한 반복을 사용한다- 조건식이 항상
참
이 되면while
문을 반복하는 형태로 코드를 작성하면 멈추지 않는 무한반복문
이 된다. do-while
문을 이용하여 이러한 무한 반복을 구현할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
* 무한 반복문 만들기(Do-While)
* ------------------------------
* do-while 문을 이용하여 1부터 10까지 더하는 프로그램 만들기
*/
package section_04.loop;
public class loop1_3 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
do {
sum += num; // 조건식이 참이 아니더라도
num++; // 무조건 한 번은 수행하는 블록
} while (num <= 50);
System.out.println("1부터 50까지의 합은" + sum + "입니다.");
}
}
◻️ For 문
- 반복문 중에서 가장 많이 사용하는 구문이
for
문 이다. for
문의 구조:for(1️⃣초기화식; 2️⃣조건식; 4️⃣증감식) { 3️⃣수행문 }
1
2
3
4
5
int num;
for(num = 1; num <= 5; num++)
{
System.out.println(num);
}
- 처음
for
문이 시작할 때 출력할 숫자인num
을 1로 초기화한다(초기화식;) - 조건식
num < = 5
를 검사했을 때num
은 1이므로참
이다(조건식;) - 조건식이
참
이기 때문에for
문의System.out.println(num);
을 수행하고, 1을 출력한다(수행문;) - 증감식
num++
를 수행하여num
값은 3이 된다. - 위 구문을 반복하다가
num < = 5
가 거짓이 되면for
문이 종료된다
- Q. ‘num이 1부터 10이 될 때까지 num 값을 증가하면서 반복한다`를 의미하는 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
/*
* 반복문 만들기(for문)
* ------------------------------
* for 문의 구조는 다음과 같다
*
* for (초기화식; 조건식; 수행문)
* {
* System.out.println(출력);
* }
*
* 조건식이 참을 만족하지 않으면 수행문 없이 바로 출력한다
*/
package section_04.loop;
public class loop1_4 {
public static void main(String[] args) {
// num이 1부터 10이 될 때까지 num 값을 증가하며 반복한다
// 즉, 1부터 10까지의 모든 num 값을 출력할 것
int num;
for (num = 1; num <= 10; num++)
{
System.out.println(num);
}
}
}
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
/*
* 반복문 만들기(for문) (2)
* ------------------------------
* for 문의 구조는 다음과 같다
*
* for (초기화식; 조건식; 수행문)
* {
* System.out.println(출력);
* }
*
* 조건식이 참을 만족하지 않으면 for 문은 끝난다.
*/
// 1부터 10까지의 모든 정수를 더한 값을 출력하기
package section_04.loop;
public class loop1_5 {
public static void main(String[] args) {
int num;
int sum; // 변수 생성
for (num = 1, sum = 0; num <= 10; num++)
{
sum += num;
}
System.out.println("1부터 10까지의 합은" + sum + "입니다");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* for 문의 예제
* --------------------------------------------
* "안녕하세요1, 안녕하세요2..., 안녕하세요10"
* 까지 차례로 출력하는 프로그램을 작성해보기
*/
package section_04.loop;
public class loop1_6 {
public static void main(String[] args) {
int num;
int sum = 0;
for (num = 1; num <= 10; num++)
{
System.out.println("안녕하세요" + num);
}
System.out.println("만나서 반가웠어요!");
}
}
◻️ For 문을 자주 사용하는 이유
for
문을 가장 많이 사용하는 이유는 반복 횟수를 관리할 수 있기 때문while
문보다for
문이 초기화, 조건비교, 증감식을 한 줄에 쓸 수 있고 가독성도 좋다
🧙♂️ 초기화식 생략하기
1
2
3
int i = 0; // 변수 i 초기화
for ( ; i < 5; i++){ // 이미 윗 줄에서 변수 초기화 했으므로 초기화 부분 생략 가능
}
🧙♂️ 조건식 생략하기
- 어떠한 연산의 결과 값이 나왔을 때 바로
for
문의 수행을 멈추려면 - 조건식을 생략하고
for
문 앞에if
문을 사용하면 된다 - 예를 들어 1부터 시작해 수를 더해 나갈 때 더한 결과 값이 200이 넘는지 검사하려면
for
문 앞에if
문을 사용한다
1
2
3
4
5
int i;
for (i = 0; i++) {
sum += i;
if (sum > 200) break;
}
🧙♂️ 증감식 생략하기
- 증감식의 연산이 복잡하거나, 다른 연산 결과값에 의해 좌우된다면
- 증감식을 생략하고
for
문 내부에 작성할 수 있다
1
2
3
4
5
int i;
for (i = 0; i < 5;){
...
i = (++i) % 10; // 증가된 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
/**
* 중첩된 반복문(구구단 만들기); Nested Loop
* ------------------------------------------------
* 반복문 내에 또 다른 반복문을 중첩해서 사용할 수 있음
*/
package section_04.loop;
public class loop1_7_gugudan {
public static void main(String[] args) {
int dan;
int times;
// 2단부터 9단까지 반복하는 외부 반복문
for(dan = 2; dan <= 9; dan++) {
// 각 단에서 1~9를 곱하는 내부 반복문
for(times = 1; times <= 9; times++) { //내부 반복문은 반드시 초기화를 진행해야 한다.
System.out.println(dan + "X" + times + "=" + dan * times);
}
System.out.println(); // 한 줄 띄워서 출력
}
System.out.println("구구단을 종료합니다");
}
}
- 외부 반복문은 구구단의 단 수를 결정하는
dan
이 2부터 시작하여 9 이하일 때까지 내부 반복문을 수행한다. 1-1. 내부 반복문dan
에times
가 1에서 시작하여 9이하일 때까지dan
*times
를 수행하며 1-2.dan
*times
를 “dan X times = dan * times” 라고 출력한다 1-3.times
는dan * times
에서 1 ~ 9 까지 곱해지는 부분을 담당한다 - 내부 반복문 매 수행이 끝나면(times > 9 가 되는 순간) 한 줄을 띄우고 외부 반복문으로 돌아간다.
- 외부 반복문의
dan++
을 수행하고dan <= 9
를 만족하면, 다시 내부 반복문을 반복한다. - 외부 반복문 수행이 끝나면(dan > 9가 되는 순간) “구구단을 종료합니다” 를 수행한다.
◻️ 반복문 총 정리(while, do-while, for)
- 반복 횟수가 정해진 경우에는 for문을 사용하는 것이 좋다.
- 수행문을 반드시 한 번 이상 수행해야 하는 경우에는 do-while 문이 좋다.
- 조건의 참 거짓에 따라 반복문이 수행되는 경우 while 문을 사용하는 것이 좋다.
◻️ continue 문
- 반복문 안에서
continue
를 만나면 이후의 문장은 수행하지 않고for
문의 처음으로 돌아가 증감식을 수행한다 continue
문은 반복문을 계속 수행하지만, 특정 조건에서는 수행하지 않고 건너 뛰어야 할 때 사용한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* continue 문
*/
// 1부터 100까지의 수를 더할 때 홀수일 때만 더하고 짝수일 때는 더하지 않는 프로그램
// 조건이 참이고, continue 를 만나면 증감식을 수행한다
// 조건이 거짓이면 continue 이후 문을 수행한다
package section_04.loop;
public class loop1_9 {
public static void main(String[] args) {
int total = 0;
int num;
for (num = 1; num <= 100; num++) {
if (num % 2 == 0) // num 값이 짝수인 경우
continue; // 이후 수행을 생략하고 num++ 수행
total += num; // num 값이 홀수인 경우에만 수행
}
System.out.println("1부터 100까지 홀수의 합은" + total + "입니다");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* continue 문(2)
*/
// 1부터 100까지 수 중에서 3의 배수만 출력하는 코드
package section_04.loop;
public class loop1_10 {
public static void main(String[] args) {
int num;
for (num = 1; num <= 100; num++) {
if (num % 3 != 0)
continue;
System.out.println(num);
}
}
}
◻️ break 문
switch-case
문에서break
문을 사용할 때 조건을 만족하면- 더 이상 조건을 비교하지 않고
switch
문을 빠져나왔었다. 링크: switch-case문 - 반복문에서도 마찬가지로
break
를 사용하면 그 지점에서 더이상 수행문을 반복하지 않고 빠져나온다 break
문을 사용하면 모든 반복문을 빠져나오는 것이 아니고break
문을 감싸고 있는 반복문만 빠져나온다.- Q. 0부터 시작해 숫자를 1씩 늘리면서 합을 계산할 때, 숫자를 몇 까지 더하면 100이 넘어가는가?
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
/**
* break문 사용해보기
*/
// 0부터 시작해 1씩 늘리면서 합을 계산할 때 숫자를 몇까지 더하면 100이 넘는가?
package section_04.loop;
public class loop1_11 {
public static void main(String[] args) {
int num = 0;
int sum = 0;
for (num = 0; ; num++) {
sum += num;
if(sum >= 100)
break;
}
System.out.println("num: " + num);
System.out.println("sum: " + sum);
}
}