자바의 정석 8장 (23일차) - 연습문제 (try-catch로 숫자게임 반복하기)

728x90

숫자게임 반복

숫자가 나오지 않을 경우 try - catch로 게임을 재시작하도록 만드는 프로그램

 

아래의 코드처럼 do-while을 사용하였고 Scanner 함수를 사용하여 일반적인 숫자입력게임을 만들었다.

 

차이점(애먹었던 점)

  • Scanner 클래스를 try문안에 써주어야 정상작동된다.
  • 새로운 Scanner의 메모리가 할당되고 생성자를 통해 전에 넣어주었던 값을 초기화를 시켜야 무한반복을 막아준다.
  • catch구문에는 오류가 날 경우 출력하고 싶은 문구를 적고 continue를 써주면 반복문이 다시 반복된다.
	public static void main(String[] args) {
		
		Random r = new Random();
		int ran = r.nextInt(100)+1;
		System.out.println(ran);
		int count = 0;
		int n = 0;
		do {
			try {
				System.out.println("100 이하의 숫자만 입력해주세요");
				n = new Scanner(System.in).nextInt();
//				try문에 new Scanner로 클래스명을 계속 새로 실행해줌으로써 무한반복을 막아주었다.
//				만약 Scanner를 do 반복문 전에 미리 선언했다면 객체가 생성되어있으므로 반복문이 무한실행되게 된다.
			}
			catch (Exception e) {
				System.out.println("숫자만 입력해주세요");
				continue;
//				위의 nextInt로 인한 오류 발생 시 continue로 다시 반복문 반복
			}
			if(ran>n) {
				System.out.println("up");
				count++;
			}
			else if(ran<n) {
				System.out.println("down");
				count++;
			}
			else {
				System.out.println("정답!");
				System.out.println("시도 횟수: " + (count+1));
				break;
			}
		}
		while(true);
	}
}

 

 

728x90