[ JAVA ] 프로그램이 알고있는 랜덤숫자 맞추기 게임 구현하기

duck-ach·2022년 8월 4일
0

예외(Exception)처리를 공부하면서 간단한 게임을 하나 만들어보자.
자바에게 Random() 메소드를 주고, 그 랜덤값을 사용자가 Scanner를 이용해 맞추면 끝나는 게임이다.

🚩 코드

메인클래스

public class Main {
	public static void main(String[] args) {
		
		new UpDownGame().play();
		
	}
}

구현클래스

import java.util.InputMismatchException;
import java.util.Scanner;

public class UpDownGame {
	
	//필드
	private int rand; // 1 ~ 100사이 난수
	private int count; // 시도 횟수
	private Scanner sc;
	
	// 생성자
	public UpDownGame() {
		rand = (int) (Math.random() * 100 ) + 1;
		sc = new Scanner(System.in);
	}
	
	// 입력
	public int input() {
		try {
		count++;
		System.out.print("입력 >>> ");
		int n = sc.nextInt();
		if(n < 1 || n > 100) {
			throw new RuntimeException("랜덤 숫자는 1보다 작거나 100보다 클 수 없습니다.");
		}
		return n;
		}
		catch (InputMismatchException e) {
			System.out.println("1~100범위의 정수만 입력할 수 있습니다.");
			sc.next(); // 잘못 입력된 문자열 먹어 치우기
			input(); // 다시실행. 다시돌아가므로 count도 올라감.
		}
		return 0; // 이클립스 안심시키는 용도 (실제로 돌아가는일 x)
	}
	
	// 실행
	public void play() {
		
		
			while(true) {
				int n = input();
				
				
				if(n == rand) {
					System.out.println(count + "번만에 정답!");
					return;
				} else if(n < rand) {
					System.out.println("Up!!");
				} else if(n > rand) {
					System.out.println("Down!!");
				}
				
			
			// 맞출 때 까지 무한루프
		}
		
	
		
	}
	
}

throws를 이용한 Refactoring

메인클래스

public class Main {
	public static void main(String[] args) {
		
		new UpDownGame().play();
		
	}
}

클래스

import java.util.InputMismatchException;
import java.util.Scanner;

public class UpDownGame {
	
	//필드
	private int rand; // 1 ~ 100사이 난수
	private int count; // 시도 횟수
	private Scanner sc;
	
	// 생성자
	public UpDownGame() {
		// rand, sc 만들기
		rand = (int) (Math.random() * 100 ) + 1;
		sc = new Scanner(System.in);
	}
	
	// 입력
	public int input() { // public int input() throws RuntimeException, InputMismatchException {}
		count++;
		System.out.print("입력 >>> ");
		int n = sc.nextInt();
		if(n < 1 || n > 100) {
			throw new RuntimeException("랜덤 숫자는 1보다 작거나 100보다 클 수 없습니다.");
		}
		return n;
	
	}
	
	// 실행
	public void play() {

			while(true) {
				try {
					int n = input();
			
					if(n == rand) {
						System.out.println(count + "번만에 정답!");
						return;
					} else if(n < rand) {
						System.out.println("Up!!");
					} else if(n > rand) {
						System.out.println("Down!!");
					}
				
				} catch (InputMismatchException e) {
					sc.next();
					System.out.println("1~100 범위의 정수만 입력할 수 있습니다.");
				} catch (RuntimeException e) {
					System.out.println(e.getMessage());
				}
		}

		
	}
	
}

throws를 묶어서 한번에 처리해주니 확실히 코드가 더 깔끔해졌다.

🕶 게임방법

  1. 콘솔(console)의 입력>>> 에 적당한 숫자를 입력한다.
  2. 콘솔이 UP이나 DOWN이라는 힌트를 줄텐데 그것을 토대로 정답을 맞추면 된다.
profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글