简体   繁体   中英

How do I include a question asking the user if they want to play again?

I am still new to Java and as such I am still figuring some things out. I have been having issues with including code asking the user if they want to play again. I have attempted putting it in the main class in a print statement which gave me an error. After that, I attempted putting it in the Guess.java class in multpile places but I just recieved errors. I have read up on the issue and some sites have suggested a while loop but I am unsure how to implement it into my current code. I have included both the main class which is called GuessingGame.java and the Guess.java class below. Thank you for any assistance that can be provided.

GuessingGame.java

public class GuessingGame {

    public static void main(String[] args) {

        new Guess().doGuess();

    }
}

Guess.java

class Guess {

    private int answer = 0;
    int tries = 0;
    Scanner input = new Scanner(System.in);
    int guess, i;
    boolean win = false;
    int amount = 10;

    public Guess() {
        answer = generateRandomNumber();
    }

    //Generate a private number between 1 and a thousand
    private int generateRandomNumber() {
        Random rand = new Random();
        return rand.nextInt(1000) + 1;
    }

    public void doGuess() {
        while (!win) {
            System.out.println("You are limited to ten attempts."
                    + " Guess a number between 1 and 1000: ");
            guess = input.nextInt();
            if (tries > 9) {
                System.out.println("You should be able to do better!"
                        + " You have hit your ten guess limit.  The number"
                        + " was: " + answer);
                System.out.println("Do you want to play again?: ");
                return;
            }

            if (guess > 1000) {
                System.out.println("Your guess is out of the range!");
            } else if (guess < 1) {
                System.out.println("Your guess is out of the range!");
            } else if (guess == answer) {
                win = true;
                tries++;
            } else if (guess < answer && i != amount - 1) {
                System.out.println("Your guess is too low!");
                tries++;
            } else if (guess > answer && i != amount - 1) {
                System.out.println("Your guess is too high!");
                tries++;
            }

        }

        System.out.println("Congragulations! You guessed the number!"
                + "The number was: " + answer);
        System.out.println("It took you " + tries + " tries");
    }
}

You already found a good position for adding this functionality:

System.out.println("Do you want to play again?: ");

The first step now is to also tell the user what he/she should enter after that question:

System.out.println("Do you want to play again? (enter 0 for yes and 1 for no): ");

After that we need to get the user input of course:

int number;
//If the user enters e.g. a string instead of a number, the InputMismatchException
//will be thrown and the catch-block will be executed
try {
    number = input.nextInt();
    
    //If number < 0 OR number > 1
    if(number < 0 || number > 1) {
        //The rest of the try-block will not be executed.
        //Instead, the following catch-block will be executed.
        throw new InputMismatchException();
    }
    break;  
}

catch(InputMismatchException e) {
    System.out.println("Enter 0=yes or 1=no");
    //Clears the scanner to wait for the next number
    //This is needed if the user enters a string instead of a number
    input.nextLine();
}

If you don't know about try-catch-statements yet, I suggest to read this explanation. For details about the InputMismatchException, please see the documentation .

The problem now is that the user only has one chance to enter 0 or 1. If the user makes a wrong input the program will just stop. One solution to this problem is to just put the code in a while-loop:

int number;
while(true) {
    try {
        number = input.nextInt();
        if(number < 0 || number > 1) {
            throw new InputMismatchException();
        }
        break;  
    }

    catch(InputMismatchException e) {
        System.out.println("Enter 0=yes or 1=no");
        input.nextLine();
    }
}

After this block, we can be sure that number is either 0 or 1. So now we can add a simple if-statement to check the value:

if(number == 0) {
    new Guess().doGuess();
}
return;

So all in all the code looks like this:

System.out.println("Do you want to play again? (enter 0 for yes and 1 for no): ");
int number;
while(true) {
    try {
        number = input.nextInt();
        if(number < 0 || number > 1) {
            throw new InputMismatchException();
        }
        break;  
    }

    catch(InputMismatchException e) {
        System.out.println("Enter 0=yes or 1=no");
        input.nextLine();
    }
}
if(number == 0) {
    new Guess().doGuess();
}
return;

Don't forget to add the following import-statements:

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

Try this. Basically, if the user responds with "yes" , we will call the function again.

    if (tries > 9) {
            System.out.println("You should be able to do better!"
                    + " You have hit your ten guess limit.  The number" + " was: " + answer);
            System.out.println("Do you want to play again? (yes/no): "); // modified line
            if("yes".equalsIgnoreCase(input.next())){ // newly added if block
                answer = generateRandomNumber();
                tries=0;
                i=0;
                win = false;
                doGuess();
            }
            return;
        }

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM