본문 바로가기

java/제어문(Control Flow Statements) - 반복문

반복문

 

반복문은 코드가 반복해서 실행되도록 한다. (시작점과  어디까지 순회할건지 정해서)

 

반복문에는 for문 , while문 , do-while문 등이 있다. 

for문과 while문은 서로 변환이 가능한데, for문은 설정한 횟수만큼 반복 하고 for문은 설정한 조건에 따라 사용한다.  

 

 

 

 

 

for문

 

for문은 조건식이 성립하는 범위에서만큼 반복하여 실행문을 실행한다.  

for (초기화; 조건식; 증감식)

 for 조건문 내용은 위와 같다.

 

위 의 for문 예시를 보면 다음과 같이 설명할 수 있다. 

for ()의 소괄호()는 조건문으로,  순서대로 int i = 1; (초기값), i <= 10; (언제까지), i++ (증감식으로)가 적혀있다. 

그 아래 중괄호{}는 실행문으로  무엇을 할지를 알 수 있다.

 

초기값은 sum = 0, i = 1으로 

실행순서는 다음과 같다. 

1. i<=10; (조건 확인) : 

2. sum += i; (조건에 부합하다면 실행)

3. i++ (증가하여 )

1번의 조건식이 성립하는 동안 반복한다.  (성립하지 않으면 멈춘다.) 

 

 즉 요약하자면 위 for문은 i가 10이될때까지  한 회에 i가 1씩 증가해서 sum에 더한다.

sum은 1+2+3+4+5+6+7+8+9+10를 계산하여  55로 출력된다.

 

 

 

주의 할 점은,

i의 작동 범위는 블록 안에서만 (블록스코프) 스코프 지나면 지워진다는 것이다. 

스코프 안의 i와 바깥 i는 다른 조건이다.

 

스코프를 사용하는 이유는  사용함으로써  라이프사이클이 끝나면 가비지컬렉터가 지워

메모리를 더 효율적으로 운용하기 위함이다.

 

 

 

 

 

 

 

while문

for문이 정해진 횟수만큼 반복 한다면, while문은 조건식이 true일 경우에 계속해서 반복한다.

 

(초기화);
        while(조건식) {
실행문; //조건식이 참인 동안 실행
증감식;
}

while문 구조를 한글로 설명하면 위와 같다.  조건식이 true라면 초기값을 실행문에 대입하여(처음만!) 조건식이 true 동안 만큼 실행문을 반복한다.   

단, while 안에는 초기화를 안에 넣을 수 없다. 초기화가 같이 반복 되기 때문이다.

 

 또한 증감식을 가장 마지막에 적어야 실수를 줄일 수 있다.

증감식을 while문의 시작 부분에 작성하면, 반복이 발생하기 전에 증감이 수행되기 때문이다.

이는 종종 무한루프를 유발할 수 있다.

예를 들어, 증감이 먼저 실행되면서 조건을 충족하지 못하게 되어 무한 루프에 빠질 수 있기 때문이다.

반면에 증감식을 while문의 끝 부분에 작성하면, 반복이 발생하기 전에 조건을 평가하고,

조건이 충족되면 증감이 수행되어 이러한 종류의 오류를 방지할 수 있다.

 

 

 

 

 

 

 

 

do-while문

do-while문은  while문처럼 조건에 따라 반복 실행하지만 순서는 while문과 반대로 실행문을 우선 실행시키고 결과에 따라 조건식으로 실행 여부를 결정하는 반복문이다.

do {
        (1)실행문 //처음 한 번은 무조건 실행
} while((2)조건식);

순서는 다음과 같다.

1. (1) 실행문을 먼저 실행합니다.

2. (1) 실행문이 모두 실행되면 (2) 조건식을 평가한다.

3. 그리고 그 결과가 true이면 (1) 실행문 → (2) 조건식으로 반복 실행을 하고,

        false이면 do-while문을 종료한다.

import java.util.Scanner;

public class Main {
    public static void main(String args[]){
        int input = 0, randomNum = 0;

        randomNum = (int)(Math.random() * 10) + 1; // 1 ~ 10 임의의 수를 생성
        Scanner scanner = new Scanner(System.in);

        do{
            System.out.println("1과 10 사이의 정수를 입력하세요");
            input = scanner.nextInt();

            if(input > randomNum) {
                System.out.println("더 작은 정수를 입력하세요");
            } else if (input < randomNum) {
                System.out.println("더 큰 정수를 입력하세요");
            }
        } while(input != randomNum);
        System.out.println(randomNum +" 정답입니다!");
    }
}

 

public class Main {

    public static void main(String[] args) {
       for (int i = 0; i < 10; i++){
           for(int j = 0; j < 10; j++){
               System.out.printf("현재 변수 i의 값은 : %d, 현재 변수j의 값은 : %d%n",i, j);
           }
       }
    }
}

'java > 제어문(Control Flow Statements) - 반복문' 카테고리의 다른 글

break문과 continue문  (0) 2024.04.05