반복문

황상익·2024년 3월 18일

Inflearn JAVA

목록 보기
6/61

반복문의 시작
while, do-while, for

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

        cnt = cnt + 1;
        System.out.println("cnt = " + cnt);

        cnt = cnt + 1;
        System.out.println("cnt = " + cnt);

        cnt = cnt + 1;
        System.out.println("cnt = " + cnt);
    }
}

while 1

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

조건식을 확인한다. 참이면 코드 블럭을 실행하고, 거짓이면 while문을 탈출
참일경우 코드 블럭이 끝나면 다시 조건식으로 들어가서 검사 후 조건식 실행

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

        while (cnt < 3) {
            cnt = cnt + 1;
            System.out.println("cnt = " + cnt);
        }
    }
}

난이도 UP!

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

        sum = sum + i;
        System.out.println("i= " + i + " sum = " + sum);
        i++;

        sum = sum + i;
        System.out.println("i= " + i + " sum = " + sum);
        i++;

        sum = sum + i;
        System.out.println("i= " + i + " sum = " + sum);
    }
}
public class While2_2 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int endNum = 3;

        while (i <= endNum) {
            sum = sum + i;
            System.out.println("i= " + i + " sum = " + sum);
            i++;
        }
    }
}

그림을 통해 분석

do-while
조건에 관계 없이 무조건 한번은 코드 실행

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

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

-> doWhile은 최초 한번은 항상 실행

Break, Continue
break는 반복문을 즉시 종료, continue는 반복문의 나머지 부분을 건너뛰고 다음 반복으로 진행

break

while(조건식) {
 코드1;
 break;//즉시 while문 종료로 이동한다.
 코드2;
}
//while문 종료

continue

while(조건식) {
 코드1;
 continue;//즉시 조건식으로 이동한다.
 코드2;
}
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++;
        }
    }
}

조건식을 잘 보면 true라고 되어 있다. 항상 조건이 참이기 때문에 while문은 무한 반복 가능성 있다. 따라서, break문이 있기 때문에 피할 수 있다.

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++;
        }
    }
}

i == 3인 경우 skip

for문 1
for문은 주로 반복 횟수가 정해져 있을때 사용

for (1.초기식; 2.조건식; 4.증감식) {
 // 3.코드
}

for문 실행 순서
초기식 실행, (주로 반복 횟수와 변수를 선언, 초기화 할때 사용). 초기식은 한번만 사용
조건식을 검증, 참이면 코드를 실행, 거짓이면 for문을 빠져 나간다
코드 실행
코드 종료되면 증감식을 실행, 초기식에 놓은 반복횟수와 관련 있다면 변수의 값을 증가할때 사용
다시 조건식 부터 실행

for (int i = 1; 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문을 빠져나간다
public class For1 {
    public static void main(String[] args) {
        for (int i = 1; i <=10 ; i++) {
            System.out.println(i);
        }
    }
}
public class For2 {
    public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;
        for (int i = 1; i <=endNum ; i++) {
            sum += i;
            System.out.println("sum = " + sum);
        }
    }
}

for (int i = 1; i <=endNum ; i++) -> i가 카운터 변수, 증가하면서 반복 횟수가 올라가고, 변수 i를 사용해서 계속 반보갈지 아니면 빠져나갈지 판단

for2

for (초기식; 조건식; 증감식) {
 // 코드
}
public class Break2 {
    public static void main(String[] args) {
        int sum = 0;
        int a = 1;

        for (; ;){
            sum += a;
            if (sum > 10) {
                System.out.println("sum = " + sum);
                break;
            }
            a++;
        }
    }
}

for (; ;)를 보면 조건식이 없다. for문은 조건이 없으면 무한반복

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

        for (int i = 1; ; i++) {
            sum += i;
            if (sum > 10) {
                System.out.println("sum = " + sum);
                break;
            }
            i++;
        }
    }
}

중첩 반복문

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

연습문제
1.

public class Practice {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 10){
            System.out.println("i = " + i);
            i++;
        }


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

        for (int num = 2, cnt = 1; cnt <= 10 ; cnt++, num += 2) {
            System.out.println("num = " + num);
        }

       int num = 2;
       int cnt = 1;

        while (cnt <= 10){
            System.out.println("num = " + num);
            num += 2;
            cnt++;
        }
    }
}
public class Practice3 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int max = 100;

        while (i <= max){
            sum = sum + i;
            i ++;
        }
        System.out.println("sum = " + sum);

        System.out.println("++++++++++");
        max = 100;
        sum = 0;

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

    }
}
public class Practice5 {
    public static void main(String[] args) {
        int rows = 5;

        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

        System.out.println();

        for (int i = rows; i >= 1; --i) { // 역순으로 출력
            for (int j = 1; j <= i; ++j) { // 각 줄의 별 출력
                System.out.print("*");
            }
            System.out.println(); // 줄 바꿈
        }
    }
}
profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글