반복문 for / while / do ~ while

이승우·2023년 6월 28일

JAVA

목록 보기
11/14
post-thumbnail

▣ 반복문

  • 코드의 실행을 여러 번 하기 위해 제공되는 문장

  • for, while, do ~ while

■ for : 시작과 끝을 알 때 사용하는 반복문

  • for

for ( 초기값; 조건식; 증가·감소식 ) {

  반복수행코드

}

▶ 예제 if

/**
 * 시작과 끝을 알 때 사용하는 반복문 : for<br>
 * 문법)<br>
 * for (시작값; 끝값; 증,감소식){ <br>
 * 반복수행 문장들... <br>
 * 
 * @author user
 */
public class UseFor {

	public static void main(String[] args) {
		// 0~9까지 1씩 증가하는 값을 출력하는 반복문
		for (int i = 0; i < 10; i++) {
			System.out.print(i + " ");
			System.out.println("안녕하세요");
		} // end for

		// 1~100까지 1씩 증가하는 값을 옆으로 출력하는 반복문 .
		// 짝수만
		for (int i = 1; i < 101; i++) {
			if (i % 2 == 0) {
				System.out.print(i + " ");
			}
		}
		System.out.println();

		// 1~100까지 홀수만 출력하는 반복문
		for (int i = 0; i < 101; i++) {
			if (i % 2 == 1) {
				System.out.print(i + " ");
			}
		}
		System.out.println();

		// for문의 증,감소식은 대상체의 값을 변경하여 유지할 수 있는 모든 문법을 사용할 수 있다.
		for (int i = 1; i < 101; i += 2) {
			System.out.print(i + " ");
		}
		System.out.println();

		// 1~9까지 1씩 증가하는 수를 아래로 출력 반복문
		for (int i = 1; i < 10; i++) {
			System.out.println("2x" + i + "=" + i * 2);
		}

		// for문을 사용하여 A~Z까지 출력
		for (char i = 65; i < 91; i++) {
			System.out.print(i + " ");
		}
		System.out.println();

		for (int i = 65; i < 91; i++) {
			System.out.print((char) i + " "); // casting 이용 : int를 char로 변환하여 출력해야 문자가 나온다
		}
		System.out.println();

		// 1~100까지의 합을 출력 : 1+2+3+4+ ~ +100 = 5050
		int sum = 0;
		for (int i = 1; i <= 100; i++) {

			sum += i; // sum = sum+1
		}
		System.out.println("1~100까지의 합 : " + sum);

		// 100~0까지 1씩 감소하는 값을 옆으로 출력
		for (int i = 100; i >= 1; i--) { // 초기식: int i=100; 조건식: i가 1보다 크거나 같을때까지; 증감식: i는 1씩 감소!
			System.out.print(i + " ");
		}
		System.out.println();

		// 대문자 A~Z까지와 소문자 a~z까지를 한번에 출력하는 for
		// A(a) B(b)..Z(z) /대문자 65~90 소문자 97~122
		for (char i = 65, a = 97; i < 91 && a < 123; i++, a++) {
			System.out.print(i + "(" + a + ") ");

		}

		for (char c = 65; c < 91; c++) {
			System.out.print(c + "(" + (char) (c + 32) + ") ");
		}

	}// main

}// class

▶ 실행결과
0 안녕하세요
1 안녕하세요
2 안녕하세요
3 안녕하세요
4 안녕하세요
5 안녕하세요
6 안녕하세요
7 안녕하세요
8 안녕하세요
9 안녕하세요
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1~100까지의 합 : 5050
100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
A(a) B(b) C(c) D(d) E(e) F(f) G(g) H(h) I(i) J(j) K(k) L(l) M(m) N(n) O(o) P(p) Q(q) R(r) S(s) T(t) U(u) V(v) W(w) X(x) Y(y) Z(z)
A(a) B(b) C(c) D(d) E(e) F(f) G(g) H(h) I(i) J(j) K(k) L(l) M(m) N(n) O(o) P(p) Q(q) R(r) S(s) T(t) U(u) V(v) W(w) X(x) Y(y) Z(z)

● 다중 for : for문 안에 for문 또 정의

▶ 실습 다중 for

/**
 * 다중 for문의 사용.(바깥 for가 한번 실행 될때 안쪽 for는 몇번 실행되는가?)
 * 
 * @author user
 */
public class UseFor2 {

	public static void main(String[] args) {

		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 6; j++) { // 다중for
				System.out.println("i = " + i + "/j=" + j);
			} // end for
		} // end for

		System.out.println("--------------구구단 출력--------------");

		for (int i = 2; i < 10; i++) { // 단은 2단에서부터 시작하여 9단까지 반복
			System.out.println(i + "단 시작");
			for (int j = 1; j <= 9; j++) { // 곱해지는 수는 1에서 부터 9까지 반복
				System.out.println(i + "x" + j + "=" + (i * j));
			} // end for
			System.out.println(i + "단 끝");
		} // end for

		// 0 0
		// 1 0 1 1
		// 2 0 2 1 2 2
		// 3 0 3 1 3 2 3 3

		for (int i = 0; i < 4; i++) {
			for (int j = 0; j <= i; j++) {
				System.out.print(i + " " + j + " ");
			}
			System.out.println();
		}

		// 0 0 0 1 0 2 0 3
		// 1 1 1 2 1 3
		// 2 2 2 3
		// 3 3

		for (int i = 0; i < 4; i++) {
			for (int j = i; j < 4; j++) {
				System.out.print(i + " " + j + " ");
			}
			System.out.println();
		}

		// 1 1 1 1 1
		// 1 0 0 0 1
		// 1 0 0 0 1
		// 1 0 0 0 1
		// 1 1 1 1 1

		int k = 0;
		for (int i = 0; i < 5; i++) { // 행을 반복하기위한 for
			for (int j = 0; j < 5; j++) { // 열을 반복하기위한 for
				k = i == 0 || i == 4 || j == 0 || j == 4 ? 1 : 0;

				// 처음 행이거나 마지막행이거나 처음 열이거나 마지막 열이라면 1을 그렇지 않다면 0을
				// k변수에 할당하고 출력한다.
				System.out.print(k + " ");
			} // end for

			System.out.println();

		} // end for

	} // main

} // class

▶ 실행결과
i = 0/j=0
i = 0/j=1
i = 0/j=2
i = 0/j=3
i = 0/j=4
i = 0/j=5
i = 1/j=0
i = 1/j=1
i = 1/j=2
i = 1/j=3
i = 1/j=4
i = 1/j=5
i = 2/j=0
i = 2/j=1
i = 2/j=2
i = 2/j=3
i = 2/j=4
i = 2/j=5
i = 3/j=0
i = 3/j=1
i = 3/j=2
i = 3/j=3
i = 3/j=4
i = 3/j=5
i = 4/j=0
i = 4/j=1
i = 4/j=2
i = 4/j=3
i = 4/j=4
i = 4/j=5
--------------구구단 출력--------------
2단 시작
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
2단 끝
3단 시작
3x1=3
3x2=6
3x3=9
3x4=12
3x5=15
3x6=18
3x7=21
3x8=24
3x9=27
3단 끝
4단 시작
4x1=4
4x2=8
4x3=12
4x4=16
4x5=20
4x6=24
4x7=28
4x8=32
4x9=36
4단 끝
5단 시작
5x1=5
5x2=10
5x3=15
5x4=20
5x5=25
5x6=30
5x7=35
5x8=40
5x9=45
5단 끝
6단 시작
6x1=6
6x2=12
6x3=18
6x4=24
6x5=30
6x6=36
6x7=42
6x8=48
6x9=54
6단 끝
7단 시작
7x1=7
7x2=14
7x3=21
7x4=28
7x5=35
7x6=42
7x7=49
7x8=56
7x9=63
7단 끝
8단 시작
8x1=8
8x2=16
8x3=24
8x4=32
8x5=40
8x6=48
8x7=56
8x8=64
8x9=72
8단 끝
9단 시작
9x1=9
9x2=18
9x3=27
9x4=36
9x5=45
9x6=54
9x7=63
9x8=72
9x9=81
9단 끝
0 0
1 0 1 1
2 0 2 1 2 2
3 0 3 1 3 2 3 3
0 0 0 1 0 2 0 3
1 1 1 2 1 3
2 2 2 3
3 3
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1


● 개선된(향상된) for

  • 인덱스를 사용할 수 없다.

  • 입력된 배열 또는 Collection(List, Set)의 첫방부터 끝방까지 출력하는 일

  • 기존의 for보다 처리되는 속도가 느리다.

  • Java SE 5 (JDK1.5)에서부터 지원하는 문법

for (int i : arr) {

   System.out.println( i );

}

▶ 실습 - 개선된 for와 기존 for

/**
 * 개선된 for loop:
 * 인덱스를 사용할 수 없다.
 * 입력된 배열의 첫방부터 끝방까지 출력.
 */
public class ImprovementFor {

	public static void main(String[] args) {

		// array 배열
		int[] arr = { 2020, 10, 29, 12, 7 };

		// 개선된 for: 인덱스를 사용할 수 없다.
		for (int value : arr) {
			System.out.println(value);
		} // end for

		// 기존 for: 인덱스를 사용할 수 있다.
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		} // end for
	}// main
}// class

▶ 실행결과
2020
10
29
12
7
2020
10
29
12
7


■ while : 시작과 끝을 알 수 없을 때 사용하는 반복문

● while : 최소 0번 수행, 최대 조건까지 수행

while (조건식) {

반복수행코드;

증가감소식;

}

▶ 실습 while

/**
 * while : 시작과 끝을 모를 때 사용하는 반복문 최소 0번 수행에 최대조건까지 수행.<br>
 * 문법) <br>
 * 초기값; <br>
 * while(조건식){ <br>
 * 반복수행문장들 <br>
 * 증.감식 <br>
 * @author user
 */

public class UseWhile {

	public static void main(String[] args) {

		int i = 0;

		while (i < 5) {
			System.out.println("i = " + i);
			i++; // 증.감소식
		} // end while

		// while을 사용하여 구구단 3단 출력
		int a = 3;
		int j = 0;
		while (j < 9) {
			j++;
			System.out.println(a + " x " + j + " = " + 3 * j);
		}

	}// main

}// class

▶ 실행결과
i = 0
i = 1
i = 2
i = 3
i = 4
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27

● do ~ while : 최소 1번 수행, 최대 조건까지 수행

초기값;

do {

반복수행코드;

증가감소식;

} while (조건식) ;

▶ 실습 do~while

/**
 * 시작과 끝을 모를 때 사용하는 반복문.<br>
 * 최소 1번 수행에 최대 조건까지 수행<br>
 * do-while<br>
 * 
 * 문법) do{ 반복수행문장들..,<br>
 * 증.감소식; <br>
 * }while(조건식); <br>
 * 
 * @author user
 */
public class UseDoWhile {

	public static void main(String[] args) {

		int i = 100;
		do {
			System.out.println(i); // 반복수행문장
			i++; // 증.감소식
		} while (i < 5); // 조건식

		// do-while을 사용하여 1~100까지의 합을 출력

		int sum = 0;
		i = 1;
		do {
			System.out.println(i);
			i++;
			sum += i;
		} while (i < 101);

		System.out.println("1~100까지의 합 :" + sum);

	}

}

▶ 실행결과
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
1~100까지의 합 :5150


● 무한 loop (infinite loop) : 끝나지않는 프로그램을 만들 때(OS, 시계, 서버…)

  • for는 조건식에 ;;

  • while은 조건식에 true

*break; - switch~case, for, while, do~while을 빠져나갈 때 사용(선택사항)

▶ 실습 - 무한 loop

/**
 * 무한루프와 여러개의 초기값을 가지는 for문
 * 
 * @author user
 *
 */
public class InfiniteFor {

	public static void main(String[] args) {

		// 수를 세는 무한 loop
		for (int i = 0;; i++) { // 조건이 없기 때문에 for가 끝나지 않는다.
			System.out.println(i);
			if (i == 5) {
				break;
			} // end if
		} // end for
			// 무한루프 아랫줄은 실행될 수 없기 때문에 코드를 작성할 수 없다.
		System.out.println("안녕");

		// 증가하는 수를 세지않는 무한 loop
		for (;;) {
			System.out.println("무한loop");
			break;
		} // end for

		// 여러개의 초기값을 가지는 for문
		for (int i = 0, j = 10, k = 5; i < 5; i++, j--) {
			System.out.println("i = " + i + ",j = " + j + ",k=" + k);
		}

		for (char c = 65, c1 = 97; c < 91; c++, c1++) {
			System.out.println(c + "(" + c1 + ")");
		}
		System.out.println();

		// 1~100까지 홀수만 출력
		for (int i = 1; i < 101; i += 2) {
			if (i % 2 == 0) {
				continue;
			}
			System.out.println(i + "");
			System.out.println("안녕");
		}

	}// main

} // class

▶ 실행결과
0
1
2
3
4
5
안녕
무한loop
i = 0,j = 10,k=5
i = 1,j = 9,k=5
i = 2,j = 8,k=5
i = 3,j = 7,k=5
i = 4,j = 6,k=5
A(a)
B(b)
C(c)
D(d)
E(e)
F(f)
G(g)
H(h)
I(i)
J(j)
K(k)
L(l)
M(m)
N(n)
O(o)
P(p)
Q(q)
R(r)
S(s)
T(t)
U(u)
V(v)
W(w)
X(x)
Y(y)
Z(z)
1
안녕
3
안녕
5
안녕
7
안녕
9
안녕
11
안녕
13
안녕
15
안녕
17
안녕
19
안녕
21
안녕
23
안녕
25
안녕
27
안녕
29
안녕
31
안녕
33
안녕
35
안녕
37
안녕
39
안녕
41
안녕
43
안녕
45
안녕
47
안녕
49
안녕
51
안녕
53
안녕
55
안녕
57
안녕
59
안녕
61
안녕
63
안녕
65
안녕
67
안녕
69
안녕
71
안녕
73
안녕
75
안녕
77
안녕
79
안녕
81
안녕
83
안녕
85
안녕
87
안녕
89
안녕
91
안녕
93
안녕
95
안녕
97
안녕
99
안녕

profile
🧑🏻‍💻

0개의 댓글