import java.io.Console;
import java.util.Random;
public class Guesser {
public static final int MAX_NUMBER = 100;
private final Console console = System.console();
private final Random random = new Random();
private Answer lastAnswer = null;
enum Answer {
CORRECT, HIGHER, LOWER
}
public Guesser() {
printf("This is a game where I (the computer) will try and guess a number you choose.");
printf("Please choose a number between 1 and %d", MAX_NUMBER);
printf("Once you have chosen a number, press ENTER.");
console.readLine();
int tries = 0;
int correctNumber = -1;
int guess = -1;
int bottomRange = 1;
int upperRange = MAX_NUMBER;
do {
guess = rand(bottomRange, upperRange);
do {
System.out.printf("Is your number %d? [Yes (y), Higher (h), Lower (l)] ", guess);
lastAnswer = readAnswer();
} while (lastAnswer == null);
if (lastAnswer == Answer.CORRECT) {
correctNumber = guess;
break;
}
if (lastAnswer == Answer.HIGHER) {
bottomRange = guess + 1;
} else {
upperRange = guess - 1;
}
tries ++;
} while ( lastAnswer != Answer.CORRECT );
printf("Yippee! It took me %d tries to guess your number, which was %d.", tries, correctNumber);
}
private Answer readAnswer() {
String line = console.readLine();
for (Answer answer : Answer.values()) {
if (line.startsWith("y")) {
return Answer.CORRECT;
}
if (line.toLowerCase().startsWith(answer.toString().substring(0, 1).toLowerCase())) {
return answer;
}
}
return null;
}
private int rand(int min, int max) {
if ( min > max ) {
return rand(max, min);
}
return min + (int) (Math.random() * ((max - min) + 1));
}
private void printf(String str, Object... args) {
System.out.println(String.format(str, args));
}
public static void main(String[] args) {
new Guesser();
}
}