Posts ☕️ [Java] 30일 안에 기초 떼기/ DAY-08
Post
Cancel

☕️ [Java] 30일 안에 기초 떼기/ DAY-08

◻️ 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);
    }
  1. 처음 for문이 시작할 때 출력할 숫자인 num을 1로 초기화한다(초기화식;)
  2. 조건식 num < = 5를 검사했을 때 num은 1이므로 이다(조건식;)
  3. 조건식이 이기 때문에 for문의 System.out.println(num);을 수행하고, 1을 출력한다(수행문;)
  4. 증감식 num++ 를 수행하여 num 값은 3이 된다.
  5. 위 구문을 반복하다가 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("구구단을 종료합니다");
    }
}

  1. 외부 반복문은 구구단의 단 수를 결정하는 dan이 2부터 시작하여 9 이하일 때까지 내부 반복문을 수행한다. 1-1. 내부 반복문 dantimes가 1에서 시작하여 9이하일 때까지 dan * times 를 수행하며 1-2. dan * times를 “dan X times = dan * times” 라고 출력한다 1-3. timesdan * times 에서 1 ~ 9 까지 곱해지는 부분을 담당한다
  2. 내부 반복문 매 수행이 끝나면(times > 9 가 되는 순간) 한 줄을 띄우고 외부 반복문으로 돌아간다.
  3. 외부 반복문의 dan++ 을 수행하고 dan <= 9를 만족하면, 다시 내부 반복문을 반복한다.
  4. 외부 반복문 수행이 끝나면(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);
    }
}
This post is licensed under CC BY 4.0 by the author.