반복제어문 + 보충

부트캠프(END)/Java|2022. 5. 10. 17:52

while문은 지정된 횟수가 없는 경우에 주로 사용되고, 무한루프를 돌리는 데에 사용된다.

네트워크 서버나 데이터베이스, 파일 읽기 등에 활용할 수 있다.

  • break : switch문 또는 반복문에서만 사용할 수 있고, 반복문을 중단하는 역할을 한다.
    ⇢ break 아래에 있는 코드는 실행되지 않는다.
    무한 루프는 반드시 종료 시점을 정해주어야 한다. (System.exit(0)으로도 가능하다.)
  • continue : 반복문에서만 사용이 되고, 특정 부분을 제외한다.
package breakEx;

public class breakEx1 {

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("i=" + i);
            break; //for문 종료
        }

        System.out.println("-----i 출력 끝-----");
        for (int j = 1; j <= 10; j++) {
            if (j == 3 || j == 4 || j == 5)
                continue; // 위 if조건 만족할 때만 제외하고 for문 실행
            System.out.println("j=" + j);
        }
        System.out.println("-----j 출력 끝-----");
    }

}

출력 결과

연습문제 1

어제 for문 관련 풀었던 연습문제를 while을 사용해서 다시 풀었다.

그냥 간단하게 1부터 100까지 짝수들의 합을 구하는 문제↓

package whileLoop;

public class No3 {
    // 2+4+6+....100까지의 정수의 합을 구하고 출력하라 (while 사용)

    public static void main(String[] args) {

        int sum = 0;
        int i = 0;

        while (i <= 100) {
            if (i % 2 != 0) {
                continue;
            }
            sum += i;
            i++;
        }
        System.out.println(sum);

    }
}

코드를 이렇게 짜니까.. 루프가 끝나질 않았다. 

System.out.println(i)를 찍어 봐도 1만 찍히고 그 이후로는 맥북만 팽팽 돌아갈 뿐 끝나지 않았음..

다시 보니 내가 continue에 대해 잘못 이해하고 있어서 그런 거였다.

if문 내에 continue를 사용하면 해당 블럭 밖에 있는 코드들은 실행할 줄 알았는데,

그냥 바로 i<=100을 검사하는 곳으로 넘어가는 거였음.

 

그러니까... i가 0에서 1이 된 이후에는...

i는 100 이하임을 검사 → i(=1)를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → i는 100 이하임을 검사 → i를 2로 나눈 나머지가 0이 아님 → continue → ...(무한반복)... 이러고 있었던 셈이다.

 

마침 비슷한 문제에 대한 풀이 글이 있더라.. 링크

 

단순히 i++의 자리를 옮겨 주는 것으로 해결됐다.

package whileLoop;

public class No3 {
    // 2+4+6+....100까지의 정수의 합을 구하고 출력하라 (while 사용)

    public static void main(String[] args) {

        int sum = 0;
        int i = 0;

        while (i <= 100) {
            i++;
            if (i % 2 != 0) {
                continue;
            }
            sum += i;
        }
        System.out.println(sum);

    }
}

단, i++의 위치에 따라 조건 검사 후 i++이 실행되고 나서 출력문을 만나는지 등을 고려해서 짜야 할 듯.

다른 문제에서 1부터 10까지 더한 값을 구하려고 했는데 i++이 위에 있으니까 1부터 11까지 더해져버림...

이것도 출력문의 위치를 옮기거나 해서 조절은 가능하지만.. 아무튼 주의할 건 주의하자~

아니면 i++을 if문 안에도 넣어주는 것도 괜찮다.~.~

 

연습문제 2

그리고 아래는 어제 제일 고민 많이 했던...

한 줄에 3개씩 출력하는 문제!

package whileLoop;

public class No7 {
    // 1부터 30까지의 정수에서 짝수만 한 줄에 3개씩 출력하라
    public static void main(String[] args) {
        int i = 1;
        int j = 0;
        while (i <= 30) {
            if (i % 2 == 0) {
                if (j == 3) {
                    System.out.println();
                    j = 0;
                }
                System.out.printf("%2d\t", i);
                j++;
            }
            i++;
        }
    }
}

while이 오히려 for보다 직관적인 경우도 있는 것 같다~.~ 

'부트캠프(END) > Java' 카테고리의 다른 글

문자열 함수, 배열 + SelectionSort  (0) 2022.05.11
제어문-선택문, 반복문  (0) 2022.05.09
자바 기초(4) : 제어문-조건문  (0) 2022.05.04

댓글()