Loading...

JAVA / / 2022. 1. 10. 16:55

자바 10강. 반복문

반응형

while문 : 끝을 알 수 없을 때, 끝없는 반복

 

데몬(데미안) - 컴퓨터관점이 아닌 일반적인 관점

: 내가 계속 켜져있을테니까 네가 필요하면 가져가(선풍기, 형광등 등)

 

for문 : 끝이 정해져 있을 때, 시간이 정해진 반복(전자레인지)

 

while문 형식

 

while(조건문) {

조건이 true이면 돌아가는 내용

}               

package ex06;

import java.util.Scanner;

public class WhileEx01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            int num = sc.nextInt();
            System.out.println("사용자 입력 : " + num);

            if(num == 0) {
                break;
            }
        }
    }
}

Scanner sc = new Scanner(System.in);

이 문장은 신경쓰지 말기!

 

scanner : 사용자의 입력, 사용자의 키보드 입력을 받는 라이브러리

 

만약 조건문에 true를 넣게 되면

프로그램은 무한히 돌아가게 되고

Ctrl + C를 눌러야 빠져나올 수 있다.

 

반복문을 빠져나가는 키워드 : break

 

true를 넣은 while문을 무한 반복하다가

0의 값을 입력하면 종료가 되는 조건문을 넣어주었다.

scanner 라이브러리는 기본적으로 제공되는 라이브러리가 아니라서

외부에서 찾아 호출해주어야 한다.

호출을 해줄 때 import를 사용한다.

 

거실에 있는 선풍기를 내 방에 가지고 오는 것 : import

 

어느 방에 클래스가 있는지 모르니까 알아서 자동으로 데려와주는 것,

자동 import 매직키가 있다.

빨간 줄 밑에서 Alt + Shift + O

 

 

 

무한루프에서 break를 쓰지 않고 탈출할 수 있는 방법이 있을까?

 

while문은 한번 반복을 할 때마다 조건문을 매번 검사한다.

(조건문이 false일 때까지)


 

1. 알고리즘 : 순서대로 실행되는 로직

 

2. 코드를 가독성 있게 작성

-> 리팩토링(코드를 눈에 보기 편하게 깔끔하게 가독성 있게 일관성 있게 다시 작성)

 

3. 분석 -> 패턴이 보이면 단순화(과정) -> 리팩토링

 

∴ 완벽한 알고리즘


 

남은 동전 구하기 게임 프로그램을 만들어보자.

package ex06;

public class WhileEx03 {
    public static void main(String[] args) {
        // 남은 동전 구하기 게임 (500, 100, 50, 10)
        int money = 2680; // 500*5, 100*1, 50*1, 10*3

        int restMoney = money;

        // 1. 500원 동전 구하기
        System.out.println(restMoney / 500 + "개");
        restMoney = restMoney % 500; // 180원

        // 2. 100원 동전 구하기
        System.out.println(restMoney / 100 + "개");
        restMoney = restMoney % 100; // 80원

        // 3. 50원 동전 구하기
        System.out.println(restMoney / 50 + "개");
        restMoney = restMoney % 50; // 30원

        // 4. 10원 동전 구하기
        System.out.println(restMoney / 10 + "개");
        restMoney = restMoney % 10; // 0원
    }
}

 

이 코드에서 일정한 패턴이 보일 것이다.

 

package ex06;

public class WhileEx03 {
    public static void main(String[] args) {
        // 남은 동전 구하기 게임(500, 100, 50, 10)
        int money = 2680; // 500*5, 100*1, 50*1, 10*3

        int restMoney = money;
        
        int coin;

        // 1. 500원 동전 구하기
        coin = 500;
        System.out.println(coin + "원 : " + restMoney / coin + "개");
        restMoney = restMoney % coin; // 남은 돈 180원

        // 2. 100원 동전 구하기
        coin = 100;
        System.out.println(coin + "원 : " + restMoney / coin + "개");
        restMoney = restMoney % coin; // 남은 돈 80원

        // 3. 50원 동전 구하기
        coin = 50;
        System.out.println(coin + "원 : " + restMoney / coin + "개");
        restMoney = restMoney % coin; // 남은 돈 30원

        // 4. 10원 동전 구하기
        coin = 10;
        System.out.println(coin + "원 : " + restMoney / coin + "개");
        restMoney = restMoney % coin; // 남은 돈 0원
    }
}

 

패턴 정리가 끝났으니 반복문으로 간결화해주자.

package ex06;

import java.util.Scanner;

public class WhileEx04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int money = 2680;
        int restMoney = money;

        while (true) {
            int coin = sc.nextInt(); // 500, 100, 50, 10

            // 남은 동전 출력하는 로직
            System.out.println(coin + "원 : " + restMoney / coin + "개");
            restMoney = restMoney % coin;

            // if문 break;
            if (coin == 10) {
                break;
            }
        }
    }
}

패턴을 발견해 while문으로 반복문을 만들어 코드를 간결화시켰다.

사용자가 10원을 입력하면 프로그램이 종료되게 설계되었다.

 


 

* while 반복문 예제 *

변수 n을 이용해서 1부터 10까지 출력해보자.

package ex06;

public class WhileEx05 {
    public static void main(String[] args) {
        int n = 1;

        // 변수 n을 이용해서 1부터 10까지 출력하시오.
        // 출력이 끝나면 break 문으로 빠져나오시오.

        while (true) {
            System.out.println(n);
            n = n + 1;

            if (n > 10) {
                break;
            }
        }
    }
}

break 조건문이 while문의 위쪽에 있는 게 좋을까, 아래쪽에 있는게 좋을까?

위쪽에 있을 때는 반복문을 총 3번 반복되고,

아래쪽에 있는 반복문은 총 2번 반복된다.

따라서 아래쪽에 조건문을 두는 것이 좋은 로직이다.

 

크게 상관은 없음!

 


 

1부터 10까지 중 2의 배수만 출력해보자.

package ex06;

public class WhileEx05 {
    public static void main(String[] args) {
        int n = 1;

        // 변수 n을 이용해서 1부터 10까지 중 2의 배수만 출력하시오.
        // 출력이 끝나면 break 문으로 빠져나오시오.

        while (true) {
            if (n % 2 == 0) {
                System.out.println(n);
            }

            n = n + 1;

            if (n > 10) {
                break;
            }
        }
    }
}


for문 : 일정한 횟수만큼 반복할 때 유용하게 사용

 

n++는 n = n + 1과 같은 말이다.

 

for(int n = 1; n < 11; n++) {

자바에서 가장 특이한 조건식

(변수 초기화, 조건식, 증감)

}                                

             

다른 반복문 구조, 같은 결과

for문 ∧ while문 ∨

 

int i =1 ;

while(i < 11) {

i = i + 1;

}             

 

몇 번 반복해야 할지 알고 있을 때는 무조건 for문 쓰는 것이

간결하고 알아보기 쉽다.

 

while문은 반복문 앞에 변수를 초기화했었는데

for문은 괄호 안에서 변수를 초기화할 수 있다.

 


 

3의 배수 출력하기

package ex06;

public class ForEx01 {
    public static void main(String[] args) {
        for (int n = 1; n < 100; n++) {
            if (n % 3 == 0) {
                System.out.println(n);
            }
        }
    } // 메인 끝
}

 


 

2의 24승 출력하기

package ex06;

public class ForEx02 {
    public static void main(String[] args) {
        int num = 1;

        for (int i = 1; i < 25; i++) {
            num = num * 2;
        }

        System.out.println(num);
    }
}

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형