Original Code
import java.util.Scanner;
import java.util.Random;
public class HigherLower {
private final int maxNumber = 8;
private final Random random = new Random();
private final Scanner scanner = new Scanner(System.in);
public void playGame() {
System.out.println("Higher or Lower");
System.out.println("You have three guesses to guess the number I am thinking of between 1-8.");
System.out.println("If you guess the number correctly, you win!");
int targetNumber = random.nextInt(maxNumber) + 1;
int remainingGuesses = 3;
while (remainingGuesses > 0) {
System.out.print("Enter your guess: ");
int userGuess = scanner.nextInt();
if (userGuess < targetNumber) {
System.out.println("The number is higher");
} else if (userGuess > targetNumber) {
System.out.println("The number is lower");
} else {
System.out.println("Congratulations! You guessed the number.");
return;
}
remainingGuesses--;
}
System.out.println("You're out of guesses. The number was " + targetNumber);
}
public static void main(String[] args) {
HigherLower game = new HigherLower();
game.playGame();
}
}
Revised Code
public class HigherLower {
private final int maxNumber = 8;
private final Random random = new Random();
private final Scanner scanner = new Scanner(System.in);
private final ArrayList<Integer> previousGuesses = new ArrayList<>();
private final Map<Integer, String> comparisonMessages = new HashMap<>();
public HigherLower() {
comparisonMessages.put(-1, "higher");
comparisonMessages.put(0, "correct");
comparisonMessages.put(1, "lower");
}
public void playGame() {
System.out.println("Higher or Lower");
System.out.println("You have three guesses to guess the number I am thinking of between 1-8.");
System.out.println("If you guess the number correctly, you win!");
int targetNumber = random.nextInt(maxNumber) + 1;
int remainingGuesses = 3;
while (remainingGuesses > 0) {
System.out.print("Enter your guess: ");
int userGuess = scanner.nextInt();
if (previousGuesses.contains(userGuess)) {
System.out.println("You've already guessed that number. Try again.");
continue;
}
previousGuesses.add(userGuess);
int comparison = Integer.compare(userGuess, targetNumber);
System.out.println("The number is " + comparisonMessages.get(comparison));
if (comparison == 0) {
System.out.println("Congratulations! You guessed the number.");
return;
}
remainingGuesses--;
}
System.out.println("You're out of guesses. The number was " + targetNumber);
}
public static void main(String[] args) {
HigherLower game = new HigherLower();
game.playGame();
}
}
HigherLower.main(null)
Higher or Lower
You have three guesses to guess the number I am thinking of between 1-8.
If you guess the number correctly, you win!
Enter your guess: The number is higher
Enter your guess: The number is higher
Enter your guess: The number is higher
You're out of guesses. The number was 4