관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch4 - 16 ~ 19 [while문, do-while문] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch4 - 16 ~ 19 [while문, do-while문]

소소한나구리 2023. 11. 7. 17:17

1) while문

  • 조건을 만족시키는 동안 { }을 반복 - 반복 횟수를 모를 때 사용
  • while문과 for문은 서로 변경 가능 (원조는 while문)
  • 0 ~ n번 반복
while (조건식) {
    // 조건식의 연산결과가 참(true)인 동안 반복할 문장을 작성 
    // 조건식의 연산결과가 처음부터 false인 경우 작동하지 않음
}

 

(1) for문 같은 while문

public class ex4_12 {
	public static void main(String[] args) {
		int i = 5; // 반복 횟수 작성
		
		while(i-- != 0) { // 조건문 작성
			System.out.println(i + " - I can do it. ");
		}
	}
}

 

(2) 예제1

  • i를 몇까지 누적 합산해야 sum이 100을 넘는지 출력하도록 while문을 활용하여 작성
public class ex4_13 {
	public static void main(String[] args) {
		// i를 몇까지 더해야 sum이 조건을 넘는지 알기위한 코드
		int sum = 0;		
		int i = 0;
		
		while(sum <= 100) { // 조건문 작성
			System.out.println("i = "+i+" / "+"sum = "+sum); // 출력될 문장 작성
			sum += ++i; // i를 1씩 증가시켜서 sum에 계속 더하도록 설정
		}
	}
}

i = 0 / sum = 0
i = 1 / sum = 1
i = 2 / sum = 3
i = 3 / sum = 6
i = 4 / sum = 10
i = 5 / sum = 15
i = 6 / sum = 21
i = 7 / sum = 28
i = 8 / sum = 36
i = 9 / sum = 45
i = 10 / sum = 55
i = 11 / sum = 66
i = 12 / sum = 78
i = 13 / sum = 91

 

(2) 예제2

  • 입력받은 값의 각 자리수를 더하는 로직을 while문으로 구현
import java.util.*;

public class ex4_14_1 {
	public static void main(String[] args) {
        // 사용자가 입력한 값의 각 자리의 합을 구하는 코드
        int num = 0, sum = 0;
        System.out.print("숫자를 입력하세요.(예시:12345) > ");
			
        Scanner scanner = new Scanner(System.in);
        String tmp = scanner.nextLine(); // 화면을 통해 입력받은 내용을 tmp에 저장
        num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)를 숫자(정수)로 변환
			
        while(num != 0) {
            // num을 10으로 나눈 나머지를 sum에 더함
            sum += num%10; // sum = sum + num%10
            System.out.printf("sum=%3d num=%d%n", sum, num);
            
            num /= 10; // num = num / 10; num을 10으로 나눈 값을 다시 num에 저장	
            }
        System.out.println("각 자리수의 합:"+sum);
    }
}

 

(3) for문을 while문으로 변환

  • 로직은 위의 예제와 동일한 num의 자리수를 합하는 로직
import java.util.*;

public class ex4_14_1 {
	public static void main(String[] args) {
        // 사용자가 입력한 값의 각 자리의 합을 구하는 코드
        int num = 12345, sum = 0;
			
        // System.out.println(12345%10); // 마지막 자리를 얻는 식(10으로 나머지 연산)
			
        // for 문으로 코드작성
        for(; num>0; num = num / 10) { // num = 12345, 1234, 123, 12, 1
            sum += num % 10;
            System.out.println("sum="+sum +",num="+num%10);
        }			
        while(num>0) { // 위 코드를 while문으로 변환
            sum += num % 10;
            System.out.println("sum="+sum +",num="+num%10); 
            num = num / 10;
        }
        System.out.println("각 자리수의 합:"+sum);
    }
}

sum=5,num=5
sum=9,num=4
sum=12,num=3
sum=14,num=2
sum=15,num=1
각 자리수의 합:15

 

(4) while문의 무한 반복문

  • 조건식에 true라고 하면 무한반복됨
  • break; 로 빠져나와야 함
while (true) {  // true생략 불가
	//수행 될 문장
}

2) do - while문 

  • 블럭 { }을 최소한 한번 이상 반복
  • 사용자 입력을 받을 때 유용
  • while문으로도 가능하지만 do-while문이 코드가 가독성이 좋음
  • 1 ~ n번 반복 - 최소 1번은 꼭 실행 됨
do {
  //  조건식의 연산결과가 참(true)인 동안 반복할 문장을 작성 - 처음 1번은 무조건 실행
} while (조건식); //  끝에 ';' 을 빠트리지 않도록 유의

 

(1) 예제

import java.util.*;

public class ex4_15 {
	public static void main(String[] args) {
		// 1 ~ 100사이의 랜덤값을 사용자가 반복 입력하여 맞추는 코드
		int input = 0, answer = 0;
			
		answer = (int)(Math.random() * 100) + 1; // 1 ~ 100 사이의 임의의 수 생성
		// System.out.println("answer ="+answer); // 정답을 미리 알기위한 코드
		Scanner scanner = new Scanner(System.in);

		do {
			System.out.println("1과 100사이의 정수를 입력하세요.>");
			input = scanner.nextInt(); // 화면을 통해 입력받은 내용을 input에 정수로 저장			
			
			if(input > answer) {
				System.out.println("더 작은 수로 다시 시도해보세요.");
			} else if(input < answer) {
				System.out.println("더 큰 수로 다시 시도해보세요.");
			}
		} while(input != answer);
		System.out.println("정답입니다!");
	}
}

 

(2) 위 예제를 while문으로 변경 하면?

  • while문으로 먼저 작성해보고 코드 중복이 발생하면 do-while문으로 변경 해보는 것을 추천
import java.util.*;

public class ex4_15_while {
	public static void main(String[] args) {
		// 1 ~ 100사이의 랜덤값을 사용자가 반복 입력하여 맞추는 코드
        int input = 0, answer = 0;
			
        answer = (int)(Math.random() * 100) + 1; // 1 ~ 100 사이의 임의의 수 생성
        System.out.println("answer ="+answer); // 정답을 미리 알기위한 코드
        Scanner scanner = new Scanner(System.in);

        System.out.println("1과 100사이의 정수를 입력하세요.>");
        input = scanner.nextInt(); // 화면을 통해 입력받은 내용을 input에 정수로 저장			
        
        while(input != answer) {
			
            if(input > answer) {
                System.out.println("더 작은 수로 다시 시도해보세요.");
            } else if(input < answer) {
                System.out.println("더 큰 수로 다시 시도해보세요.");
            }
				
            System.out.println("1과 100사이의 정수를 입력하세요.>");
            input = scanner.nextInt(); // 입력 받는 코드가 중복이 발생 - 불필요한 작업이 생김		
        }
        System.out.println("정답입니다!");
     }
}

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의