안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
☞ 중첩 반복문
public void test1() {
for(int i = 0; i < 3; i++) {
System.out.println(i);
for(int j = 0; j < 5; j++) {
System.out.println("\t" + j);
}
}
}
@콘솔출력값
0
0
1
2
3
4
1
0
1
2
3
4
2
0
1
2
3
4
외부 for문 시작 → 내부 for문은 반복횟수만큼 돌고 탈출 → 외부 for문 시작 ...의 반복 순서를 갖습니다.
따라서 i의 값이 1번 출력되고 내부 for문의 j의 값이 5번 출력하고 다시 i의 값이 1번 출력되고 내부 for문의 j의 값이 5번 출력 되는 것이죠.
중첩 반복문으로 행(외부 반복문)과 열(내부 반복문)을 표현할 수도 있습니다.
0,0 | 0,1 | 0,2 | 0,3 |
1,0 | 1,1 | 1,2 | 1,3 |
2,0 | 2,1 | 2,2 | 2,3 |
public void test2() {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
System.out.print("(" + i + ", " + j + ")");
}
System.out.println();
}
}
@콘솔출력값
(0, 0)(0, 1)(0, 2)(0, 3)
(1, 0)(1, 1)(1, 2)(1, 3)
(2, 0)(2, 1)(2, 2)(2, 3)
외부 for문 내에서 개행을 해줌으로써 내부 for문이 4번 돌고 다음 행이 시작하는 것처럼 출력할 수 있었습니다.
별 찍기
☆☆☆☆☆
☆☆☆☆☆
☆☆☆☆☆
public void test3() {
for(int i = 0; i < 3; i++) {
for(int j = 0 ; j < 5; j++) {
System.out.print("☆");
}
System.out.println();
}
}
@콘솔출력값
☆☆☆☆☆
☆☆☆☆☆
☆☆☆☆☆
구구단 출력 (4~8단은 출력값에서 생략했지만, 실제론 출력됨)
public void test4() {
for(int i = 2; i < 10; i++) {
System.out.println("====" + i + "단 ====");
for(int j = 1; j < 10; j++) {
System.out.printf("%d X %d = %d\n", i, j, i*j);
}
System.out.println();
}
}
@콘솔출력값
====2단 ====
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
====3단 ====
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
....
....
....
====9단 ====
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
중첩 반복문에서의 break, continue
- break와 continue는 if문을 제외한 가까운 반복문을 한 번 탈출, pass하기 때문에
내부 for문에서 break, continue를 사용하면 내부 for문만 탈출 및 pass하게 됩니다.
외부 for문까지 탈출, pass하고 싶다면 레이블을 사용합니다.
구구단에서 곱이 50미만 일 때만 출력 (break 활용)
public void test5() {
out:
for(int i = 2; i < 10; i++) {
System.out.println("====" + i + "단 ====");
for(int j = 1; j < 10; j++) {
if(i*j >= 50) {
break out; // break + 레이블 이름
}
System.out.printf("%d X %d = %d\n", i, j, i*j);
}
System.out.println();
}
}
@콘솔출력값
====2단 ====
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
====3단 ====
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
====4단 ====
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
====5단 ====
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
====6단 ====
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
(레이블명 :) 으로 break하고자 하는 반복문 앞에 레이블을 표기하고, break + 레이블명으로 break를 해줍니다.
break out은 out 레이블이 위치해 있는 바깥쪽 for문을 탈출하라는 의미이므로, 곱이 50 이상이라면 break!
즉시 바깥쪽 for문을 탈출하여 이하 코드를 실행 및 출력하지 않게 됩니다.
구구단에서 각 단과 수가 같을 때까지만 출력 (continue 활용)
public void test6() {
POS:
for(int i = 2; i < 10; i++) {
System.out.println("====" + i + "단 ====");
for(int j = 1; j < 10; j++) {
System.out.printf("%d X %d = %d\n", i, j, i*j);
if(i == j) {
System.out.println();
continue POS;
}
}
System.out.println();
}
}
@콘솔출력값
====2단 ====
2 X 1 = 2
2 X 2 = 4
====3단 ====
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
====4단 ====
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
====5단 ====
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
====6단 ====
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
====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
====8단 ====
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
====9단 ====
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
마찬가지로 (레이블명:)으로 continue하고자 하는 반복문 앞에 레이블을 표기해주었습니다.
이 때 continue가 대체하는 중괄호는 레이블이 가리키고 있는 외부 for문의 닫힌 중괄호이므로, 외부 for문의 증감식으로 이동합니다.
별 찍기 1
☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
public void test7() {
for(int i = 0; i < 5; i++) {
for(int j = 0; j <= i; j++) {
System.out.print("☆");
}
System.out.println();
}
}
@콘솔출력값
☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
별 찍기 2 (굳이 중첩 반복문을 이용해서 ^^ 출력하기)
☆☆☆
☆
☆☆☆
☆
☆☆☆
public void test8() {
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 3; j++) {
System.out.print("☆");
if(i % 2 != 0) {
break;
}
}
System.out.println();
}
}
@콘솔출력값
☆☆☆
☆
☆☆☆
☆
☆☆☆
내부 for문에서 if문이 true, 홀수라면 break → 내부 for문만 탈출하는 것이므로 i의 증감은 그대로 이루어집니다.
따라서 i가 홀수 일 때는 별이 하나만 찍히고 탈출하고 외부 for문을 또 실행하는 것 → i는 짝수가 될 것이고 별이 세 번 찍히게 되어
원하는 모양의 별 찍기를 할 수 있습니다.
'Java > Java' 카테고리의 다른 글
2차원 배열) 가변 배열 (Jagged Array)란? (0) | 2022.03.11 |
---|---|
2차원 배열) 2차원 배열이란?, 생성 방법 (0) | 2022.03.09 |
배열) 얕은 복사, 깊은 복사 (0) | 2022.03.09 |
배열) 배열이란?, 배열의 특징, 객체의 특징, for-each문 (0) | 2022.03.08 |
제어 키워드) break, continue 제어 키워드 (0) | 2022.03.08 |