Java - 반복문 (2) while & do while

민찬홍·2023년 9월 8일

Java

목록 보기
17/31
post-thumbnail

🧩 while

  • while : 조건이 true 일 때 반복 수행
		int i = 0;

        //  💡 while 문의 괄호에는 종료조건만
        while (i < 10) {
            // 종료조건 충족을 위한 값 변화는 외적으로 
            System.out.println(i++);
				}

아래처럼 사용하면 무한루프가 된다.

		//  💡 의도적인 무한 루프에 널리 쓰이는 코드
        while (true) {
            System.out.println("인간의 욕심은 끝이 없고");
            System.out.println("같은 실수를 반복한다.");
        }

아래처럼break 를 사용하여 반복문을 종료하는 것도 가능하다.

		double popInBillion = 7.837;

        //  ⭐️ break 를 통한 반복 탈출
        while (true) {
            System.out.println("세계인구: " + (popInBillion -= 0.1));
            if (popInBillion <= 0) break;

            System.out.println("인간의 욕심은 끝이 없고");
            System.out.println("같은 실수를 반복한다.");
        }

        System.out.println("인류 멸종");

		//  100보다 작은 3의 배수들 출력해보기				

		int i = 1;

		// ⚠️ 의도대로 작동하지 않음. 이유는?
        while (true) {
            if (i % 3 != 0) continue;  // 🔴
            System.out.println(i);

            if (i++ == 100) break;
        }

위의 코드를 보면 i가 증가하기 전에 계속 continue에 걸려서 무한루프에 빠지는 것을 알 수 있다.

이런 종류의 실수는 종종 일어나니 주의해서 코드를 살펴보자.

		int i = 1;

        while (true) {
            if (i++ == 100) break;
            if ((i - 1) % 3 != 0) continue;

            System.out.println(i - 1);
        }
        // 100보다 작은 3의 배수들이 출력

위의 코드보다 조금 더 가독성이 좋은 코드는 아래 코드이다.

		int i = 1;

		//  보다 가독성을 높이고 의도를 잘 드러낸 코드
        while (true) {
            int cur = i++;

            if (cur == 100) break;
            if (cur % 3 != 0) continue;
            
            System.out.println(cur);

        }

무조건 짧은 코드가 좋은 코드는 아니다.


🧩 do ... while

  • do ... while : 일단 수행하고 조건을 봄
		int enemies = 0;

        System.out.println("일단 사격");

        do {
            System.out.println("탕");
            if (enemies > 0) enemies--;
        } while (enemies > 0);

        System.out.println("사격중지 아군이다");
		System.out.println("\n- - - - -\n");

		int x = 1; // 10 이상으로 바꿔서 다시 실행해 볼 것
        int y = x;

        while (x < 10) {
            System.out.println("while 문: " + x++);
        }

        do {
            System.out.println("do ... while 문: " + y++);
        } while (y < 10);

위의 코드들을 실행해보면 do...while 은 일단 한번은 실행하고 그 다음 조건에 따라 동작한다.


🧩 중첩예제


		final int LINE_WIDTH = 5;

        int lineWidth = LINE_WIDTH;

        while (lineWidth > 0) {
            int starsToPrint = lineWidth--;
            while (starsToPrint-- > 0) {  // 🔴
                System.out.print("*");
            }
            System.out.println();
        }

브레이크포인트를 내부 반복문에 찍고 꼭 디버그 과정을 통해 변수가 변하는 것을 확인하길 바란다.

		//  for 문으로 다시 작성
        for (int i = LINE_WIDTH; i > 0; i--) {
            for (int j = i; j > 0; j--) {
                System.out.print("@");
            }
            System.out.println();
        }
profile
백엔드 개발자를 꿈꿉니다

0개의 댓글