[Java] 제어문 _ 반복문

hwarye·2022년 11월 1일
0

Java 기초

목록 보기
7/12

반복문
코드들이 반복적으로 실행되도록 할 때 사용.
for문, while문, do-while

for문과 while문은 서로 변환이 가능하다.
-> for문 : 반복 횟수를 알고 있을 때 주로 사용.
-> while문 : 조건에 따라 반복할 때 주로 사용.


for문

조건식이 참인 동안 주어진 횟수만큼 실행문을 반복적으로 실행.

예시

public class Main {
  public static void main(String[] args) {
    int sum = 0;
    // for (초기화; 조건식; 증감식)
    for(int num = 0; num < 10; num++) {	
      sum += num;
    }
    System.out.println(sum); // 1~9의 합인 45가 출력됩니다.
  }
}

코드 실행 과정

1) num이라는 변수를 선언하고, 초깃값으로 0을 대입.
2) num는 현재 10보다 작으므로(num < 10), 실행 블록 안의 코드가 최초로 수행.
3) 실행 블록을 빠져나오면 num이 1 증가(i++).
4) num은 현재 1. 
   여전히 10보다 작으므로, 실행 블록 안의 코드가 두 번째로 수행.
5) num이 9일때까지 반복.
6) num이 10이 되면 10보다 작다는 조건을 만족하지 못하므로, for문이 종료.

! 즉, 조건식을 충족하는 동안 초기화식부터 시작해서 증감식의 규칙을 따라서 실행
조건이 충족하지 않으면, 실행문을 실행하지 않고 끝남.

cf) i: iterator (반복계수)

  • 초기화 : for문이 시작할 때 최초 한 번만 수행되며, 사용할 변수의 초깃값을 정한다.

  • 조건식 : 계속 반복할지 여부를 결정하는 조건.
    조건식 안의 값이 true라면 실행문을 실행시키고, false라면 더 이상 블록을 실행하지 않고 끝난다.

  • 증감식 : 반복 횟수를 결정하는 규칙.
    변수에 값을 더하거나 곱하는 등 수행 방식을 지정한다. ++ 은 반복문에서 자주 쓰는 증감연산자로, 피연산자의 값을 1 증가시킨다.

초기화식이 필요 없을 경우, 초기화식 생략 가능.
초기화식이나 증감식이 둘 이상이 될 수 있다.


향상된 for문(Enhanced for 문)

배열과 컬렉션 객체를 좀 더 쉽게 처리할 목적으로 자바에서 제공.

^특징^

향상된 for문은 반복실행을 하기 위해 카운터 변수와 증감식을 사용하지 않는다.
배열 및 컬렉션 항목의 개수만큼 반복하고 자동적으로 for문을 빠져나간다.

^ 예시 ^

public class EnhancedForLoop {
  public static void main(String[] args) throws Exception {
    String[] names = {"kimcoding", "javalee", "ingikim"};
    for(String name : names) {
      System.out.println(name + "님은 자바를 공부중 입니다.");
    }
  }
}
/*
kimcoding님은 자바를 공부중 입니다.
javalee님은 자바를 공부중 입니다.
ingikim님은 자바를 공부중 입니다.
*/

코드 실행 과정

1) for문의 괄호() 안에 배열에서 꺼낸 항목을 저장할 변수 선언, 콜론( : ), 그리고 사용할 배열을 작성.
2)  처음 실행할 때, names 배열에서 가져올 첫번째 값이 존재하는지 확인.
3) 값이 존재하면 해당값을 변수인 name에 저장하고 그 안의 실행문을 실행.
4) 블록 내부의 실행문이 모두 실행 되면 다시 names 배열에서 가져올 값이 있는지 확인.
5) 만약 가져올 다음 항목이 없다면 자동적으로 for문이 종료.

while 문

조건식이 true일 경우에 계속해서 반복.
for문과 while문은 초기화, 증감식의 위치만 다를 뿐 상호 대체가 가능.

^특징^
초기화와 증감식은 필요가 없다면 생략할 수 있다.

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

^예시^

int num = 0, sum = 0;
while(num <= 10) {
  sum += num; //sum = sum + num과 똑같은 식입니다. 복합 대입 연산자 "+="를 사용한 표현입니다.
  num++;
}
System.out.println(sum);

코드 실행 과정

1) num과 sum 이라는 정수 타입의 변수를 선언, 초기값으로 0 대입.
2) num은 현재 10보다 작으므로 블록 안의 코드가 수행.
3) sum이 현재의 num만큼 증가, num이 1 증가.
4) num은 현재 1. 여전히 10보다 작으므로, 실행 블록 안의 코드가 두 번째로 수행.
5) num이 10인 경우까지 반복.
6) num은 현재 11. 조건식이 거짓이므로 while문이 종료.

조건식에는 boolean 변수나 true / false 값을 산출하는 어떠한 연산식이든 올 수 있다.
BUT!
만약 조건식에 true를 사용하면 while(true) { ... } 가 되어서 무한 루프가 된다. 무한 루프는 무한히 반복하여 실행하기 때문에 언젠가는 while문을 빠져 나가기 위한 탈출 코드가 필요하다.

^예시^ : 무한 루프 탈출

public class Main {
  public static void main(String[] args) {
  boolean run = true;
  int num = 1;

    while(run){ // while(true) 조건문
      num++; //실행문
      System.out.println(num); //실행문

      if(num == 22) { //조건문, num이 22가 되면 탈출! 얏호!
        run = false;
      }
    }
  }
}

do-while 문

 while문과 동일하게 조건식에 의해 반복 실행한다.
 

코드 실행 순서

1) 실행문을 먼저 실행합니다.
2) (1)실행문이 모두 실행되면 (2)조건식을 평가.
3) 그 결과가 true이면 (1)실행문 → (2)조건식으로 반복 실행을 하고, false이면 do-while문을 종료

^예시^
: 1~10 사이의 정수를 변수 randomNum에 저장하고 이 값을 맞출 때까지 반복하는 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 +" 정답입니다!");
  }
}
profile
례코드

0개의 댓글