package edu.blastermind.model;
import java.util.Random;
/**
* A NumberGuessingGame represents the rules of a simple "guess the number" type game.
*
* @author
*
*/
public class GuessTheNumberGame {
private int highest;
private int secret;
/**
* Creates a new NumberGuessingGame with a secret number between 0 and highest.
*
* @param highest the highest possible number for this game. Must be > 0.
*/
public GuessTheNumberGame(int highest) {
// TODO 1: perform a precondition check on the parameter highest
if (highest <= 0) {
throw new IllegalArgumentException
("highest number must be at least 1");
}
this.highest = highest;
Random rng = new Random();
this.secret = rng.nextInt(highest + 1);
}
/**
* Checks to see if we've guessed correctly.
*
* @param guess our guess (must be between 0 and getHighest())
* @return true if the guess was correct, false otherwise
*/
public boolean isGuessCorrect(int guess) {
// TODO 2: perform a precondition check on the variable guess
if (guess > this.highest || guess < 0) {
throw new IllegalArgumentException
("Guess must be between 1 and 100");
}
return this.secret == guess;
}
/**
* Checks to see if our guess is higher than the secret.
*
* @param guess our guess (must be between 0 and getHighest())
* @return true if our guess is higher than the secret, false otherwise
*/
public boolean isGuessHigher(int guess) {
// TODO 3: perform a precondition check on the variable guess
if (guess > this.highest || guess < 0) {
throw new IllegalArgumentException
("Guess must be between 1 and 100");
}
return this.secret < guess;
}
/**
* Returns the highest value in the range of valid guesses.
*
* @return the highest value in the range of valid guesses
*/
public int getHighest() {
return this.highest;
}
}
package edu.westga.blastermind.controllers;
import java.util.Scanner;
import edu.westga.blastermind.model.GuessTheNumberGame;
public class GuessTheNumber {
public static void main(String[] args) {
GuessTheNumberGame game = new GuessTheNumberGame(100);
int turns = 1;
Scanner kb = new Scanner(System.in);
System.out.println("Guess a nummber between 0 and 100");
int guess = kb.nextInt();
// TODO 4: loop as long as the guess is not correct
while (guess <= game.getHighest() && guess >= 0) {
guess++;
if (guess < game.getHighest()){
System.out.println("You guessed too high!");
}
else if (guess > game.getHighest()){
System.out.println("You guessed too low!");
}
Scanner keyboard = new Scanner(System.in);
String plainText = keyboard.nextLine();
}
turns++;
// TODO 5: in the loop, check guesses and give hints
System.out.printf("You guessed the number in %d turns\n", turns);
}
}
Hello everyone I am writing a guess the number game program and my illegal argument exceptions are not working and it is saying my guesses are too high even when I enter a guess greater than 100 or less than zero. Any help is greatly appreciated. Thanks in advance.
This loop:
// TODO 4: loop as long as the guess is not correct
while (guess <= game.getHighest() && guess >= 0) {
guess++;
is not doing what you state in the comment. It will make your guess
variable reach the highest
value always. No check against the secret
number is done.
Replace your main
method with this:
public static void main(String[] args) {
GuessTheNumberGame game = new GuessTheNumberGame(100);
int turns = 1;
int guess = -1;
do {
Scanner kb = new Scanner(System.in);
System.out.println("Guess a nummber between 0 and 100");
guess = kb.nextInt();
if (game.isGuessHigher(guess)){
System.out.println("You guessed too high!");
turns++;
} else if (!game.isGuessCorrect(guess)){
System.out.println("You guessed too low!");
turns++;
}
} while (!game.isGuessCorrect(guess));
System.out.printf("You guessed the number in %d turns\n", turns);
}
I've not executed it, so it may contain some minor problems.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.