예외(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!!");
}
// 맞출 때 까지 무한루프
}
}
}
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를 묶어서 한번에 처리해주니 확실히 코드가 더 깔끔해졌다.
UP
이나 DOWN
이라는 힌트를 줄텐데 그것을 토대로 정답을 맞추면 된다.