코드스테이츠

[코드스테이츠 BE 45기] <Section1> Week2 (Java 기초3)

codingbug 2023. 4. 20. 09:06

반복문

 

코드들이 반복적으로 실행되도록 할 때 사용

for문, while문, do-while문

for문과 while문은 서로 변환이 가능하기 때문에 반복문을 작성할 때 어느 쪽을 선택해도 좋지만, for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 사용

 

for문

조건식을 충족하는 동안 초기화식부터 시작해서 증감식의 규칙을 따라서 실행

조건이 충족하지 않으면, 실행문을 실행하지 않고 끝남

초기화식이 필요 없을 경우에는 초기화식을 생략 가능

초기화식이나 증감식도 둘 이상이 될 수 있음

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

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

  • 초기화는 for문이 시작할 때 최초 한 번만 수행되며, 사용할 변수의 초깃값을 정합니다.
  • 조건식은 계속 반복할지 여부를 결정하는 조건입니다. 조건식 안의 값이 true라면 실행문을 실행시키고, false라면 더 이상 블록을 실행하지 않고 끝납니다.
  • 증감식은 반복 횟수를 결정하는 규칙입니다. 변수에 값을 더하거나 곱하는 등 수행 방식을 지정합니다. ++ 은 반복문에서 자주 쓰는 증감연산자로, 피연산자의 값을 1 증가시킵니다.
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가 출력됩니다.
  }
}

num은 number(숫자)의 줄임말로, 임의로 지정한 변수명(반복문에는 i 라는 변수명을 많이 사용)

반복문이 없다면, 우리는 sum = sum + (숫자); 와 같은 구문을 10번 작성해주어야 할 것

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

while문

조건식이 true일 경우에 계속해서 반복합

for문과 while문은 초기화, 증감식의 위치만 다를 뿐 상호 대체가 가능

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

초기화와 증감식은 필요가 없다면 생략 가능

int num = 0, sum = 0;
while(num <= 10) {
  sum += num; //sum = sum + num과 똑같은 식입니다. 복합 대입 연산자 "+="를 사용한 표현입니다.
  num++;
}
System.out.println(sum);
  • num과 sum이라는 정수 타입의 변수를 선언하고 초기값으로 0을 대입합니다.
  • num은 현재 10보다 작으므로 블록 안의 코드가 수행됩니다.
    • sum이 현재의 num만큼 증가하고 num이 1 증가합니다
  • num은 현재 1입니다. 여전히 10보다 작으므로, 실행 블록 안의 코드가 두 번째로 수행됩니다.
  • num이 10인 경우까지 반복됩니다.
  • num은 현재 11입니다. 조건식이 거짓이므로 while문이 종료됩니다.

이때 조건식에는 boolean 변수나 true / false 값을 산출하는 어떠한 연산식이든 올 수 있음

만약 조건식에 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;
      }
    }
  }
}

위 코드는 num 이 22가 되었을 때 탈출 하는 탈출 코드를 작성하였지만, while 문을 빠져나가기 위한 또 다른 방법으로는 break 문을 이용하는 방법도 있습니다.

// 운동장에서 뛰세요 → 어디로? 어디까지? 얼마나?
//for(어디부터; 어디까지; 얼만큼씩)
for(int 시작 = 0; 시작 <= 5; 시작++){ // 2칸씩 뛰고싶으면for(int 시작 = 0; i<=10; 시작 = 시작 + 2)
		//요안에 있는 애들이 위에 조건만큼 반복됨
		//무엇을 반복할지 생각
		System.out.println("hello");
}

0 시작 = 0 입력 → 시작 <= 5 로 가서 확인

트루인지 확인했으면 System.out.println("hello") 실행식으로 가서 헬로 실행

실행했으면 시작++ 증감식으로 가서 증감 실행1

1 다시 시작1 <= 5 조건식에 가서 트루인지 확인 → 코드실행 → 헬로출력 → 시작++ 증감으로 다시 감 → 증감실행 시작2

2 다시 시작2 <= 5 조건식에 가서 트루인지 확인 → 코드실행 → 헬로출력 → 시작++ 증감으로 다시 감 → 증감실행 시작3

3 다시 시작3 <= 5 조건식에 가서 트루인지 확인 → 코드실행 → 헬로출력 → 시작++ 증감으로 다시 감 → 증감실행 시작4

4 다시 시작4 <= 5 조건식에 가서 트루인지 확인 → 코드실행 → 헬로출력 → 시작++ 증감으로 다시 감 → 증감실행 시작5

5 다시 시작5 <= 5 조건식에 가서 트루인지 확인 → 코드실행 → 헬로출력 → 시작++ 증감으로 다시 감 → 증감실행 시작6

6 다시 시작6 <= 5 조건식에 가서 트루인지 확인 →False → }반복문 포루프 밖으로 나가게됨

// while(조건식){
// 
// }

int 시작 = 0; //어디서부터 돌아라 하는 시작점이 필요
while(시작 <= 5){ //어디까지 뛰어라
		System.out.println("hello");
    시작++; //++시작 해도 여기서는 영향 미치지 않음
}

0 조건으로 가서 시작0 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작1

1 조건으로 가서 시작1 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작2

2 조건으로 가서 시작2 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작3

3 조건으로 가서 시작3 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작4

4 조건으로 가서 시작4 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작5

5 조건으로 가서 시작5 <= 5 트루인지 확인 →트루: 실행 hello → 시작++로 가서 증감→ 시작6

6 조건으로 가서 시작6 <= 5 트루인지 확인 →펄스 → } 와일루프를 나감