Stay Hungry Stay Foolish

자바/자바 입문

[자바 기초] 04. 반복문(while/do-while/break/continue/for)

dev스카이 2024. 3. 24. 19:35

반복문

  • while문
  • do-while문
  • break
  • continue
  • for문
  • 중첩 반복문

🔘 while문

while문은 조건에 따라 코드를 반복해서 실행할 때 사용한다.

 

형식

while (조건식) {
 	// 코드
}
  • 조건식이 참이면 코드 블럭을 실행하고, 이후에 코드 블럭이 끝나면 다시 조건식 검사로 돌아가서 조건식을 검사한다.
  • 조건식이 거짓이면 while문을 벗어난다. (거짓일 때까지 무한반복)

 

예제 - while문을 사용하여 1을 한 번씩 더해서 총 3번 더하는 프로그램을 작성한다. 

 

 

While1_2

package loop;

public class While1_2 {
    public static void main(String[] args) {
        int count = 0;

        while (count < 3) {
            count++;
            System.out.println("현재 숫자는: " + count);
        }
    }
}

 

실행 결과

현재 숫자는: 1
현재 숫자는: 2
현재 숫자는: 3
  • while (count <  3) 에서 조건식을 확인한다. 현재 count의 값이 0이므로 조건식이 참이다.
  • 따라서 다음과 같이 코드 블럭을 반복 실행한다.
    • 코드 블럭에서 count++; 으로 인해 count값이 1이 된다. 출력 코드로 인해 현재 숫자는 1이라고 출력한다..
    • 다시 while (count < 3) 에서 조건식을 확인하고 현재 count의 값이 1이므로 조건식이 이다.
    • 코드 블럭에서 count++;으로 인해 count값이 2가 된다. 출력 코드로 인해 현재 숫자는 2이라고 출력한다.
    • 다시 while (count < 3) 에서 조건식을 확인하고 현재 count의 값이 2이므로 조건식이 이다.
    • 코드 블럭에서 count++;으로 인해 count값이 3이 된다. 출력 코드로 인해 현재 숫자는 3이라고 출력한다.
    • 다시 while(count < 3)에서 조건식을 확인하는데 현재 count의 값이 3이므로 조건식이 거짓이 된다.
  • 따라서 while문을 종료 즉, 빠져나간다.

🔘 do-while문

do-while문은 while문과 비슷하지만, 조건에 상관없이 무조건 한 번은 코드를 실행한다.

 

형식

do {
   // 코드
} while (조건식);
  • do-while문은 조건식에 관계 없이 최초 한번은 코드 블럭을 실행한다.
  • 조건식이 while문과 다르게 뒤에 있는 걸 확인할 수 있다.

 

DoWhile2

package loop;

public class DoWhile2 {
    public static void main(String[] args) {
        int i = 10;
        do {
            System.out.println("현재 숫자는: " + i);
            i++;
        } while (i < 3);
    }
}

 

실행 결과

현재 숫자는: 10
  • 단순 while문이었으면, 조건식 i < 3 이 거짓이기 때문에 조건에 맞지 않아 코드 블럭을 실행하지 않고 빠져나온다.
  • 그러나 do-while문은 조건식이 참이든 거짓이든 최초 한번은 코드 블럭을 실행한다.
  • 따라서 실행 결과를 보면 '현재 숫자는: 10'이라고 출력된 것이다.
  • 코드 블럭이 한 번 수행된 후에 조건식을 확인하니 거짓이므로 do-while문을 빠져나온다.

do-while문은 최초 한번은 코드 블럭을 꼭 실행해야 하는 경우에 사용하면 된다.


🔘 break

break는 반복문에서 사용할 수 있는 키워드로, 반복문을 즉시 종료하고 나간다.

 

형식

while(조건식) {
 	코드1;
 	break; //즉시 while문 종료로 이동한다.
 	코드2;
}
//while문 종료
  • 조건식을 확인하고 참이면 코드1을 수행한다.
  • 그 다음 코드 2를 수행하기 전에 break를 만나서 while문이 즉시 종료된다.

 

Break1

package loop;

public class Break1 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;

        while (true) {
            sum += i;
            if (sum > 10) {
                System.out.println("합이 10보다 크면 종료: i= " + i + " sum=" + sum);
                break;
            }
            i++;
        }
    }
}

 

실행 결과

합이 10보다 크면 종료: i= 5 sum=15
  • while문의 조건식을 보면 true라고 되어 있는데, 이는 무한 반복한다는 말이다.
  • while문 내의 if문에서 sum이 10보다 크면 break를 만나게 되므로 while문을 빠져나올 수 있다.

🔘 continue

continue도 반복문에서 사용할 수 있는 키워드로, 반복문의 나머지 부분을 건너뛰고 다음 반복으로 진행하는 데 사용된다.

 

형식

while(조건식) {
 	코드1;
 	continue; //즉시 조건식으로 이동한다.
 	코드2;
}
  • 조건식을 확인하고 참이면 코드 1을 수행한다.
  • 그 다음 코드 2를 수행하기 전에 continue를 만나서 코드 2를 실행하지 않고 다시 조건식으로 이동한다.

 

Continue1

package loop;

public class Continue1 {
    public static void main(String[] args) {
        int i = 1;
        
        while (i <= 5) {
            if (i == 3) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }
}

 

실행 결과

1
2
4
5
  • i == 3인 경우 i를 하나 증가하고 continue를 실행한다.
  • continue를 만났으므로 if문을 포함하여 아래에 있는 출력 코드와 i를 증가하는 코드까지 무시한 다음 while문의 조건식으로 다시 돌아온다.
  • 따라서 실행 결과에서 3이 제외된 것을 볼 수 있다.

🔘 for문

while문과 같은 반복문이고, 코드를 반복 실행하는 역할을 한다. for문은 주로 반복 횟수가 정해져 있을 때 사용한다.

 

형식

for (1.초기식; 2.조건식; 4.증감식) {
 	// 3.코드
}
  1. 초기식이 실행된다. 주로 반복 횟수와 관련된 변수를 선언하고 초기화 할 때 사용한다. 초기식은 딱 1번 사용된다.
  2. 조건식을 검증한다. 참이면 코드를 실행하고, 거짓이면 for문을 빠져나간다.
  3. 코드를 실행한다.
  4. 코드가 종료되면 증감식을 실행한다. 주로 초기식에 넣은 반복 횟수와 관련된 변수의 값을 증가할 때 사용한다.
  5. 다시 2. 조건식 부터 시작한다. (무한 반복)

 

사용하는 방법은 아래와 같다. 1부터 10까지 for문을 사용하여 출력해본다.

 

For1

package loop;

public class For1 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}
  1. 초기식이 실행된다. int i = 1
  2. 조건식을 검증한다. i <= 10
  3. 조건식이 참이면 코드를 실행한다. System.out.println(i);
  4. 코드가 종료되면 증감식을 실행한다. i++
  5. 다시 2. 조건식을 검증한다. (무한 반복) 이후 i <= 10 조건이 거짓이 되면 for문을 빠져나간다.

🔘 중첩 반복문

반복문은 내부에 또 반복문을 만들 수 있다. for , while 모두 가능하다.

 

Nested1

package loop;

public class Nested1 {
    public static void main(String[] args) {
        for(int i = 0; i < 2; i++) {
            System.out.println("외부 for 시작 i:" + 1);
            for(int j = 0; j < 3; j++) {
                System.out.println("-> 내부 for " + i + "-" + j);
            }
            System.out.println("외부 for 종료 i:" + i);
            System.out.println();
        }
    }
}

 

실행 결과

외부 for 시작 i:0
-> 내부 for 0-0
-> 내부 for 0-1
-> 내부 for 0-2
외부 for 종료 i:0

외부 for 시작 i:1
-> 내부 for 1-0
-> 내부 for 1-1
-> 내부 for 1-2
외부 for 종료 i:1
  • 외부 for는 2번, 내부 for는 3번 실행된다. 
  • 그런데 외부 for 1번당 내부 for가 3번 실행되기 때문에 외부(2) * 내부(3) 해서 총 6번의 내부 for 코드가 수행된다.

 

예제 - 중첩 for문을 사용해서 구구단을 완성해보자.

 

NestedEx1

package loop.ex;

public class NestedEx1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.println(i + " * " + j + " = " + i * j);
            }
        }
    }
}

 

실행 결과

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
...
9 * 8 = 72
9 * 9 = 81