본문 바로가기
언어/JAVA

[제어문] 반복문(for문, while문, do-while문)

by 코딩맛집 2023. 1. 16.
  • for문은 반복 횟수를 알고 있을 때 주로 사용한다.
  • while문은 조건에 따라 반복할 때 주로 사용한다.
  • while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐일 뿐 동작 방식은 동일하다.

 

4.3.1 for문

int sum = 0;
for (int i=1; i<=100; i++) {
	sum += i;
}
System.out.println("1~100까지의 합: " + sum);

실행 순서: 

1 → 2 (true이면) → 3 → 4 → 2

1 → 2 (false이면) → 종료

초기화식이 필요 없을 경우, 아래와 같이 생략이 가능하다.

int i = 1;
for(;i<=100; i++){}

초기화 식이 둘 이상일 경우에는 쉼표로 구분해서 작성한다.

for(int i=0, j=100; i<=50 && j>=50; i++, j--){}

※ for문을 작성시 주의 점

초기화식에서 변수 선언할 때 부동소수점 타입을 사용하면 안된다. 0.1은 float 타입으로 정확하게 표현할 수 없기 때문이다. 

 

4.3.2 while문

조건식에는 비교 또는 논리 연산식이 주로 오는데, 조건식이 false가 되면 반복 행위를 멈추고 while문을 종료한다. 

 

실행 순서: 

1 → 2 (true이면) → 1

1 → 2 (false이면) → 종료

 

1~10까지 합 구하기 코드

int sum = 0;
int i = 1;

while (i<=10) {
    sum += i;
    i++;
}
System.out.println("1~10까지의 합: " + sum);

 

4.3.3 do-while문

주의 할 점은 while() 뒤에 반드시 세미콜론을 붙여야 한다.

 

실행 순서: 

1  → 2 (true이면) → 1

1 → 2 (false이면) → 종료

키보드로부터 문자열을 입력받고 출력시킨다. 먼저 콘솔에서 입력한 문자열을 읽는 방법에 대해 알아보자. System.in.read() 메소드는 하나의 키 코드만 읽기 때문에 콘솔에 입력된 문자열을 한 번에 읽을 수 없다. 대신 다음과 같이 Scanner 객체를 생성하고 nextLine() 메소드를 호출하면 콘솔에 입력된 문자열을 한 번에 읽을 수 있다. nextLine() 메소드로 읽은 문자열을 저장하기 위해서는 String 변수가 필요한데 아래 코드에서는 inputString 변수에 저장했다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("메시지를 입력하세요");
        System.out.println("프로그램을 종료하려면 q를 입력하세요");

        Scanner scanner = new Scanner(System.in);
        String inputString = scanner.nextLine();
        
        do{
            System.out.println(">");
            inputString = scanner.nextLine();
            System.out.println(inputString);
        } while(!inputString.equals("q"));

        System.out.println();
        System.out.println("프로그램 종료");
        }
    }

 

4.3.4 break문

반복문인 for문, while문, do-while문을 실행 중지할 때 사용된다. break문은 대개 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용한다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception{
        while(true) {
            int num = (int)(Math.random()*6) +1;
            System.out.println(num);
            if(num == 6){
                break;
            }
        }
        System.out.println("프로그램 종료");
        }
    }

만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다. 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름을 붙이고 "break 이름;"을 사용하면 된다.

4.3.5 continue문

continue문은 반복문인 for, while문, do-while문에서만 사용되는데, 블록 내부에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동한다. continue문도 대개 if문과 같이 사용되는데, 특정 조건을 만족하는 경우에 continue문을 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다. 다음은 continue문의 실행 흐름을 보여준다.

1에서 10 사이의 수 중에서 짝수만 출력하는 코드

public class Main {
    public static void main(String[] args) throws Exception {
        for(int i=1; i<=10; i++) {
            if (i % 2 != 0) {
                continue;
            }
            System.out.println(i);
            }
        }
    }