호쌤
호쌤 Just For Fun

[Java] 반복문

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 반복문≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Java] 반복문

주어진 조건이 참을 충족하는 동안 블록 안의 실행문을 반복해서 수행하는 문법을 반복문이라고 합니다. 반복문에는 while문, do-while문, for문이 있습니다.

이 중에서 가장 단순한 구조를 갖는 문법은 while문이지만 구조가 단순하다 보니 복잡한 반복을 구사하기에는 초심자에게는 다소 어렵게 느껴질 수 있습니다. 그러므로 이 글의 내용이 어렵게 느껴진다면 마지막에 소개하는 for문을 더 중점적으로 살펴보시기 바랍니다.

do-while문은 거의 사용되지 않습니다.

#01. while문 (보통)

1) 기본 구문 형식

주어진 조건식이 참인 동안 블록 안을 반복적으로 수행한다.

1
2
3
while (조건) {
    ... 반복적으로 수행할 구문 ...
}

2) 반복문의 조건이 성립하기 위한 구성

1
2
3
4
5
6
7
8
초기식;            // (1) 조건식을 판별하기 위한 기준값을 생성한다.

while (조건식) {   // (2)(5) 조건을 판별한다.

    ... 반복적으로 동작할 구문 ... // (3) 명령을 수행한다.

    증감식;        // (4) 기준값에 변화를 주고 다시 조건식으로 이동한다.
}

While1.java

0부터 10보다 작은 동안 1씩 증가하는 변수값의 변화과정 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class While1 {
    public static void main(String[] args) {
        // 초기식
        int x = 0;

        // 조건식 -> x가 10보다 작은 동안 반복수행
        while (x < 10) {
            // 반복이 진행되는 동안 수행할 명령
            // --> 여기서는 x의 변화 과정을 출력한다.
            System.out.printf("x=%d\n", x);

            // 증감식 -> 조건에 사용되는 값을 변경
            x++;
        }

        System.out.println("-------------");
        System.out.printf("x의 최종값: %d\n", x);
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
11
12
x=0
x=1
x=2
x=3
x=4
x=5
x=6
x=7
x=8
x=9
-------------
x의 최종값: 10

While2.java

1부터 10까지의 총 합을 구하는 프로그램

[Tip] 총 합을 구할때는 반복문 전에 합산결과를 저장할 변수를 0으로 초기화 시켜놓기 반복을 수행해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class While2 {
    public static void main(String[] args) {
        // 총합을 구하기 위해서는 값을 누적 합산할 변수를 0으로 초기화 하고 시작해야 한다.
        int sum = 0;

        // 초기식
        int i = 1;

        while (i < 11) {
            // sum에 i의 값이 1부터 10까지 변하는 동안 누적합산 한다.
            sum += i;

            // 중간과정 출력
            System.out.printf("i=%d, sum=%d\n", i, sum);

            // i값을 1씩 증가한다.
            i++;
        }
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
i=1, sum=1
i=2, sum=3
i=3, sum=6
i=4, sum=10
i=5, sum=15
i=6, sum=21
i=7, sum=28
i=8, sum=36
i=9, sum=45
i=10, sum=55
While3.java

숫자값을 입력받아 그 값에 1부터 9까지 곱해가는 구구단을 수식으로 출력하는 프로그램을 작성하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;

public class While3 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.print("숫자를 입력하세요(2~9): ");
        int x = reader.nextInt();

        int y = 1;

        while (y < 10) {
            System.out.printf("%d x %d = %2d\n", x, y, x * y);
            y++;
        }
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
숫자를 입력하세요(2~9): 7
7 x 1 =  7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
While4.java

두 개의 정수 x, y를 입력 받아 x부터 y까지의 총 합을 구하는 프로그램을 While문 만으로 작성하시오.

단, y는 x보다 큰 값만 입력했다고 가정합니다.

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
33
34
35
36
37
38
39
40
41
42
43
import java.util.Scanner;

public class While4 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.print("x를 입력하세요: ");
        int x = reader.nextInt();

        System.out.print("y를 입력하세요: ");
        int y = reader.nextInt();

        // 반복을 몇 번 해야 할 지 결정하는 값
        // -> x부터 y까지 1씩 증가하면서 반복해야 하므로
        //    반복은 y와 x의 차이 횟수만큼 반복하면 된다.
        // ex) x=1, y=5일 때 1,2,3,4,5 총 5회 반복
        //     즉 y-x+1 회 반복
        int count = y - x + 1;

        // 초기식
        int i = 1;

        // 합계를 저장할 값.
        // --> x부터 y까지의 총 합이므로 x부터 시작해야 한다.
        int sum = x;

        while (i < count) {
            // x부터 y까지 1씩 증가하는 값들의 합이므로 x에 1씩 증가하는 i를 더해서
            // 새로운 변수를 만든다.
            int j = x + i;

            System.out.printf("%d + %d\n", sum, j);

            // 합계 계산
            sum += j;

            // 증감식
            i++;
        }

        System.out.printf("%d부터 %d까지의 총 합은 %d 입니다.", x, y, sum);
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
11
12
x를 입력하세요: 11
y를 입력하세요: 20
11 + 12
23 + 13
36 + 14
50 + 15
65 + 16
81 + 17
98 + 18
116 + 19
135 + 20
11부터 20까지의 총 합은 155 입니다.

#02. do-while문 (안중요)

while문은 조건의 성립 여부에 반복 수행을 결정하므로 만약 조건이 처음부터 거짓이라면 한 번도 수행하지 않는다.

1
2
3
4
5
int a = 10;

while (a < 10) {
    // 이 블록은 한번도 실행되지 않는다.
}

do-while문은 선실행,후판별 형태로 구성된다.

일단 {}안의 구문을 1회 실행하고 나서 조건을 판별하여 계속 수행할지 여부를 판단한다.

1
2
3
4
5
6
int i = 0;          // 초기식

do {
    /* ... 반복 실행될 구문 ... */
    i++;            // 증감식
} while (i < 10);   // 조건식

만약 아래와 같이 조건이 거짓이더라도 우선 한번은 실행한 후 조건을 판별하기 때문에 do-while문은 최소 한 번은 실행한다.

1
2
3
4
5
int a = 10;

do {
    // 이 블록은 한 번만 실행된다.
} while (a < 10);

개인적으로 한 번도 사용해 보지 않았습니다. do-while문이 존재하지 않는 언어도 많습니다.

#03. for문 (매우중요)

초기식, 조건식, 증감식을 하나의 괄호안에 모두 명시하는 형태. while이나 do-while보다 반복에 필요한 요건을 한눈에 파악할 수 있기 때문에 훨씬 간결하다.

1
2
3
for (초기식; 조건식; 증감식) {
    /* 반복 실행할 구문 */
}

For1.java

0부터 10보다 작은 동안 1씩 증가하는 변수값의 변화과정 확인하는 예제

1
2
3
4
5
6
7
public class For1 {
    public static void main(String[] args) {
        for (int i=0; i < 10; i++) {
            System.out.printf("i=%d\n", i);
        }
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
i=0
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9

For2.java

1부터 10까지의 총 합을 구하는 프로그램

1
2
3
4
5
6
7
8
9
10
11
12
13
public class For2 {
    public static void main(String[] args) {
        // 총합을 구하기 위해서는 값을 누적 합산할 변수를 0으로 초기화 하고 시작해야 한다.
        int sum = 0;

        for (int i = 1; i < 11; i++) {
            // sum에 i의 값이 1부터 10까지 변하는 동안 누적합산 한다.
            sum += i;
            // 중간과정 출력
            System.out.printf("i=%d, sum=%d\n", i, sum);
        }
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
i=1, sum=1
i=2, sum=3
i=3, sum=6
i=4, sum=10
i=5, sum=15
i=6, sum=21
i=7, sum=28
i=8, sum=36
i=9, sum=45
i=10, sum=55

For3.java

숫자값을 입력받아 그 값에 1부터 9까지 곱해가는 구구단을 수식으로 출력하는 프로그램을 작성하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Scanner;

public class For3 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.print("숫자를 입력하세요(2~9): ");
        int x = reader.nextInt();

        for (int y = 1; y < 10; y++) {
            System.out.printf("%d x %d = %2d\n", x, y, x * y);
        }
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
숫자를 입력하세요(2~9): 7
7 x 1 =  7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

For4.java

두 개의 정수 x, y를 입력 받아 x부터 y까지의 총 합을 구하는 프로그램을 For문 만으로 작성하시오.

단, y는 x보다 큰 값만 입력했다고 가정합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Scanner;

public class For4 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        System.out.print("x를 입력하세요: ");
        int x = reader.nextInt();

        System.out.print("y를 입력하세요: ");
        int y = reader.nextInt();

        int sum = 0;

        for (int i=x; i<=y; i++) {
            System.out.printf("%d + %d\n", sum, i);
            sum += i;
        }

        System.out.printf("%d부터 %d까지의 총 합은 %d 입니다.", x, y, sum);
    }
}
출력결과
1
2
3
4
5
6
7
8
9
10
11
12
13
x를 입력하세요: 1
y를 입력하세요: 10
0 + 1
1 + 2
3 + 3
6 + 4
10 + 5
15 + 6
21 + 7
28 + 8
36 + 9
45 + 10
1부터 10까지의 총 합은 55 입니다.

연습문제 (1)

과목수를 입력받고 입력 받은 과목의 수 만큼 점수를 입력받은 후 총점, 평균, 학점을 계산하여 출력하는 프로그램을 while문과 if문 만을 사용해서 작성하시오.

모든 입력값과 계산값은 정수로만 처리되어야 합니다.

학점의 경우 char 타입을 사용하고, 91~100A, 81~90B, 71~80C학점으로 처리하시오.(그 외의 경우 F)

실행결과

1
2
3
4
5
6
7
과목수를 입력하세요: 5
>> 1번째 과목의 점수를 입력하세요: 67
>> 2번째 과목의 점수를 입력하세요: 86
>> 3번째 과목의 점수를 입력하세요: 45
>> 4번째 과목의 점수를 입력하세요: 67
>> 5번째 과목의 점수를 입력하세요: 99
총점은 364점 이고, 평균은 72점 이며 C학점 입니다.
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
33
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("과목수를 입력하세요: ");
        int count = sc.nextInt();

        int i = 0;
        int sum = 0;

        while (i < count) {
            System.out.printf(" >> %d번째 과목의 점수를 입력하세요: ", i+1);
            int point = sc.nextInt();
            sum += point;
            i++;
        }

        int avg = sum / count;
        char grade = 'F';

        if (avg > 90) {
            grade = 'A';
        } else if (avg > 80) {
            grade = 'B';
        } else if (avg > 70) {
            grade = 'C';
        }

        System.out.printf("총점은 %d점 이고, 평균은 %d점 이며 %s학점 입니다.", sum, avg, grade);
    }
}

연습문제 (2)

앞에서 구현한 문제를 for문과 switch문을 사용하여 동일하게 구현하시오.

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
33
34
35
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("과목수를 입력하세요: ");
        int count = sc.nextInt();

        int sum = 0;

        for (int i=0; i<count; i++) {
            System.out.printf(" >> %d번째 과목의 점수를 입력하세요: ", i+1);
            int point = sc.nextInt();
            sum += point;
        }

        int avg = sum / count;
        char grade = 'F';

        switch ((avg-1) / 10) {
            case 9:
                grade = 'A';
                break;
            case 8:
                grade = 'B';
                break;
            case 7:
                grade = 'C';
                break;
        }

        System.out.printf("총점은 %d점 이고, 평균은 %d점 이며 %s학점 입니다.", sum, avg, grade);
    }
}



크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 반복문≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus