자바 기본 배우기 -반복문-

1. for문

 

for문은 초기화식, 조건식, 반복 수행할 문장, 증감식 4가지로 구성되어 있다

 

 

 

- 1) 초기화는 반복문이 시작될 때 딱 한번만 실행된다.

 

그 이후에는, 2) 조건식으로 가서 조건을 검사한다.

 

그리고 조건식이 참이라면, 3) 반복문을 수행하며 4) 증감식으로 가서 변수를 증감시킨다.

 

증감이 끝났다면, 2) 다시 조건식으로 가서 조건을 검사한다.

 

그리고 조건식이 참이면, 3) 반복문 수행 4) 증감식 수행..

 

하지만 조건식이 거짓이라면 반복문이 종료된다.

 

- 당연하지만 조건식이 처음부터 거짓이면 단 1번도 반복문을 수행 안할 수도 있다

 

- 초기화식과 증감식은 ,를 이용해서 둘 이상을 작성할 수도 있다

 

뭐 이런 느낌인가?

for(int i=0,j=0 ; i <= 5; i++, j++){
}

 

- 필요하지 않은 부분은 생략 가능하다.

 

다음과 같이 작성하면 무한루프가 된다

 

for(   ;    ;   )

 

조건식이 항상 참이라 생각하고 무한루프가 됨

 

- for문은 반복횟수를 알고있을 때 유용하다

 

package java04.control;

public class Loop01 {
	public static void main(String[] args) {
		//for (초기화;조건식;증감식){반복내용}
		//조건식을 비워두면 항상 참으로 인식해서 끝나지 않음
		//반복횟수를 알고 있을 때 사용하면 참 좋다
		
		for(int i = 0; i < 10; i++) {
			System.out.println(i);
		}
		
		//증감식에 i++말고 i=i+2 이런것도 당연히 가능함
		for(int i = 0; i<10; i=i+2) {
			System.out.println(i);
		}
		
		//초기화식 여러개 사용가능함
		for(int i=0,j=10; i<10; i+=2,j--) {
			System.out.println(i);
			System.out.println(j);
		}
	}
}

0
1
2
3
4
5
6
7
8
9
/////////

0
2
4
6
8

///////
0
10
2
9
4
8
6
7
8
6

 

 

참고로 초기화식의 i와 for문 밖의 i는 전혀 다른 변수

 

 

메모리 공간 상 서로 다른 곳에 생긴다고 함

 

for문에서 int i = 0을 쓰고 나서 for문 끝나면.. int i 는 더 이상 안씀

 

물론 다음과 같이 int i = 0을 먼저 쓰고 나서...

 

for문으로 int i = 0 초기화해버리면 조금 문제 생길 수가 있다

 

i = 0으로 했다가.. for문 내에서 i값을 바꿔버리니까 뭐라하는듯?

 

 

중복으로 쓰였다고 뭐라함

 

 

2. 중첩 for문

 

for문은 또 다른 for문을 내포할 수 있다

 

 

 

package java04.control;

public class Loop02 {
	public static void main(String[] args) {
		
		//중첩 반복문(구구단)
		for(int i = 2; i<=9; i++) {
			System.out.printf("%d단\n", i);
			for(int j=1;j<=9; j++) {
				System.out.printf("%d * %d = %d\n", i,j,i*j);
			}
		}
	}
}

2단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

 

특히 printf는 줄이 안바뀐다는 것을 명심해야함

 

그래서 줄을 바꾸고 싶으면 \n을 넣어줘야함

 

 

3. while문

 

당연하지만 for문안에 while문, while문 안에 while문.. while문 안에 for문 등 중첩 다양하게 가능

 

 

 

조건식이 참일 경우에 계속해서 반복 수행할 문장을 반복 수행하게 된다

 

= 조건식이 거짓이 될 때까지 문장을 반복 수행한다

 

그리고 조건식은 생략 불가능하다고 함

 

그래서 무한루프를 돌리고 싶다면 조건식에 true라고 해줘야함

 

다음 코드는 실행되지 않는 코드

 

조건식이 거짓이라서

 

package java04.control;

public class Loop3 {
	public static void main(String[] args) {
		int n = 5;
		
		while(n<5) {
			System.out.println("이것은 실행이 되나?");
		}
	}

}

 

다음은 항상 조건식이 참이므로, 무한루프

 

		//무한루프
		
		while(n<=5) {
			System.out.println("이것은 실행이 되나?");
		}

 

while문에는 안에서 조건식을 false로 만드려는 노력을 해줘야한다

 

안그러면 반복이 끝나지 않거든

 

//한번 하고 끝

while(n<=5) {
    System.out.println("이것은 실행이 되나?");
    n++;
}

 

반복문과 후위증감식, 전위증감식 등에서 생각을 하지 않으면 실수할 수가 있음

 

int i = 0;

while(i < 5) {
    System.out.println(i);
    i++;
}

0
1
2
3
4

 

 

0인 상태에서 출력하고, 1 더해준 다음에..

 

1 출력하고, 1 더해서 2가 된 다음에..

 

..i = 3 출력하고.. 1 더해준 다음에 i = 4인데..

 

i < 5니까 조건식이 참이고... i 출력하고 i에 1을 더해서

 

i = 5니까 조건식이 거짓이라 4까지만 출력

 

int j = 0;

while(j < 5) {
    j++;
    System.out.println(j);
}

1
2
3
4
5

 

위 경우는 j++로 1을 더해준 다음에.. 출력하고

 

...

 

j = 4 출력한 다음에 j < 5니까 다음 반복문 수행

 

j++로 j=1 더해주고 j=5에서 출력 한 다음에..

 

j < 5가 거짓이니까 바로 반복문 탈출

 

 

4. do while문

 

구조가 조금 특이하게 생겼다

 

 

do while문은 do 내부 블록의 내용을 먼저 수행한 다음에, while문의 조건식을 판단한다

 

그러니까 조건식과 무관하게 최소 한번은 반복 문장을 수행하게 된다

 

나머지 조건식이 true이면 계속해서 반복 수행할 문장을 수행

 

= 조건식이 거짓이 될 때까지 문장을 반복 수행한다

 

조건식은 생략 불가능하다

 

그리고 while(조건식);으로 끝에 세미콜론을 반드시 써줘야함

 

 

5. break

 

switch, while, do-while, for문에서 반복 블록에서 빠져나오기 위해 사용한다

 

그리고 반복문에 이름(라벨)을 붙여서 한번에 빠져 나올수도 있다고..???

 

 

6. continue

 

반복문의 특정지점에서 제어를 반복문의 처음으로 보낸다.

 

continue를 수행한 순간 그 뒤의 문장은 수행하지 않고 다음 반복문으로 넘어감

 

반복문에 이름(라벨)을 붙여 제어할 수 있다

 

 

7. 반복문에 이름 붙이기?

 

자바에서는 반복문에 이름 붙이는게 가능한가봐??

 

package java04.control;

public class Loop4 {
	public static void main(String[] args) {
		
		for(int i = 0; i<5; i++) {
			for(int j= 0 ; j < 5; j++) {
				if(j==3) {
					break;
				}
				System.out.println("i: " +i + ", j: " + j);
			}
		}
	}

}

i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
i: 3, j: 0
i: 3, j: 1
i: 3, j: 2
i: 4, j: 0
i: 4, j: 1
i: 4, j: 2

 

 

일단 위와 같이 하면 j = 3 이상은 출력이 안되는거 알 수 있는데

 

 

첫번째 for문을 바로 탈출하고 싶으면

 

첫번째 for문 위에 label을 설정하고 break label;로 탈출하면 첫번째 반복문을 바로 탈출한다

 

A:
for(int i = 0; i<5; i++) {
    B:
    for(int j = 0; j<5;j++) {
        if(j==3) {
            break A;
        }
        System.out.println("i: "+i+", j: "+j);
    }
}

i: 0, j: 0
i: 0, j: 1
i: 0, j: 2

 

위와 같이 j=3이니까 첫번째 반복문을 바로 탈출하는 것을 확인할 수 있다

 

continue도 마찬가지로 가능함

 

break와는 다르게 j=3일때만 출력을 넘기고 j=4인 경우도 출력을 해줌

 

for(int i = 0; i<5; i++) {
    for(int j=0; j<5;j++) {
        if(j==3) {
            continue;
        }
        System.out.println("i: "+i+", j: "+j);
    }
}

i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 0, j: 4
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 1, j: 4
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
i: 2, j: 4
i: 3, j: 0
i: 3, j: 1
i: 3, j: 2
i: 3, j: 4
i: 4, j: 0
i: 4, j: 1
i: 4, j: 2
i: 4, j: 4

 

 

label을 설정해서 첫번째 반복문에 대해 continue를 한다면?

 

A:
for(int i = 0;i<5;i++) {
    B:
    for(int j= 0; j<5;j++) {
        if(j==3) {
            continue A;
        }
        System.out.println("i: "+i+", j: "+j);
    }
}

i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
i: 3, j: 0
i: 3, j: 1
i: 3, j: 2
i: 4, j: 0
i: 4, j: 1
i: 4, j: 2

 

j = 3이 오는 순간 첫번째 반복문을 continue 시킬 거니까...

 

i값을 1 증가 시키고 두번째 반복문을 j = 0부터 시작하는 모습이다

 

 

참조

 

자바의 제어문 - break문, break label문, continue문, continue label문 : 네이버 블로그 (naver.com)

 

자바의 제어문 - break문, break label문, continue문, continue label문

- break문 : 반복문 for문, while문, do ~ while문 내에서 쓰이며 강제적으로 해당 반복문을 빠져 나갈 때 ...

blog.naver.com

 

TAGS.

Comments