I'm having an issue with my code where the program will not play again, but also will not end.
The code continues to loop in the inner while loop after a win or too many guesses.
Here is my code:
/**
* This program will prompt the user to guess a secret number
* This number will is between 1 and N, where N is a postive number
*
* @author: Perry Chapman
*/
import java.util.Scanner;
public class SecretNumber2
{
public static void main( String [] args )
{
int N;
int randomNumber;
int guess;
int tries, maxTries;
boolean win = false;
boolean playing = true;
int playAgain = 1;
tries = 0;
while(playing == true)
{
Scanner input = new Scanner( System.in );
System.out.println( "This is a guessing game." );
System.out.println( "What is the max number of tries: ");
maxTries = input.nextInt();
System.out.println( "Enter a value between 1 and 1000: " );
N = input.nextInt();
randomNumber = (int)(N * Math.random()) + 1;
while (win == false)
{
System.out.println( "Enter your guess: " );
guess = input.nextInt();
tries++;
if (guess == randomNumber)
{
System.out.println( "Congratulations! The number of guesses it took you was " + tries );
win = true;
System.out.println("Would you like to play again? \n (1)Yes or (2)No: ");
playAgain = input.nextInt();
if(playAgain == 1) {
playing = true;
}
else if (playAgain == 2) {
playing = false;
}
tries = 0;
}
else if(guess < randomNumber)
System.out.println( "Too low, guess again." );
else if(guess > randomNumber)
System.out.println( "Too high, guess again." );
else if(tries == maxTries)
{
System.out.println("You have exceeded the max number of tries. \nYou lose.");
System.out.println("\nWould you like to play again?\n (1)Yes or (2)No: ");
playAgain = input.nextInt();
if(playAgain == 1) {
playing = true;
}
else if(playAgain == 2) {
playing = false;
}
tries = 0;
}
}
}
}
}
Andrew is right, in order to loop the condition need to be true.The if else statement need to be in the right order. Here is a fix, I hope it will help.
public static void main(String[] args) {
int N;
int randomNumber;
int guess;
int tries, maxTries;
boolean lose;
boolean playing = true;
int playAgain;
tries = 0;
while (playing) {
Scanner input = new Scanner(System.in);
System.out.println("This is a guessing game.");
System.out.println("What is the max number of tries: ");
maxTries = input.nextInt();
System.out.println("Enter a value between 1 and 1000: ");
N = input.nextInt();
randomNumber = (int) (N * Math.random()) + 1;
lose = true;
while (lose) {
System.out.println("Enter your guess: ");
guess = input.nextInt();
tries++;
if (guess == randomNumber) {
System.out.println("Congratulations! The number of guesses it took you was " + tries);
lose = false;
System.out.println("Would you like to play again? \n (1)Yes or (2)No: ");
playAgain = input.nextInt();
if (playAgain == 1) {
playing = true;
} else if (playAgain == 2) {
playing = false;
}
tries = 0;
} else if (tries == maxTries) {
System.out.println("You have exceeded the max number of tries. \nYou lose.");
System.out.println("\nWould you like to play again?\n (1)Yes or (2)No: ");
playAgain = input.nextInt();
if (playAgain == 1) {
playing = true;
} else if (playAgain == 2) {
playing = false;
}
lose = false;
tries = 0;
} else if (guess < randomNumber) {
System.out.println("Too low, guess again.");
} else if (guess > randomNumber) {
System.out.println("Too high, guess again.");
}
}
}
}
I think you have two issues.
The first is that after successfully guessing the number you never set win back to false. So you won't ever enter the inner while loop a second time.
The second is the ordering of the if/else if statements, there is never a scenario where a guess can reach the final else if. Every situation will validate as true in one of the previous three ifs.
/**
* This program will prompt the user to guess a secret number
* This number will is between 1 and N, where N is a postive number
*
* @author: Perry C
*/
import java.util.Scanner;
public class SecretNumber
{
public static void main( String [] args )
{
int N;
int guess;
int playAgain;
int tries;
int maxTries;
playAgain = 1;
tries = 0;
Scanner input = new Scanner( System.in );
while(playAgain == 1)
{
boolean win = false;
System.out.println( "This is a guessing game." );
System.out.println( "How many guesses would you like?" );
maxTries = input.nextInt();
System.out.println( "Enter a value between 1 and 1000: " );
N = input.nextInt();
int randomNumber = (int)(N * Math.random()) + 1;
while (win == false)
{
System.out.println( "Enter your guess: " );
guess = input.nextInt();
tries++;
if(guess == randomNumber)
{
System.out.println( "Congratulations! The number of guesses it took you was \t" + tries );
win = true;
System.out.println( "Would you like to play again(1 or 2):" );
playAgain = input.nextInt();
tries = 0;
}
else if(guess < randomNumber)
System.out.println( "Too low, guess again." );
else if(guess > randomNumber)
System.out.println( "Too high, guess again." );
if(tries == maxTries)
{
System.out.println( "You have exceeded the max number of tries. \n You lose." );
System.out.println( "Would you like to play again(1 or 2):" );
playAgain = input.nextInt();
tries = 0;
win = true;
}
}
}
}
}
Found the issue, thought I would post the answer in case anyone else might stumble on this thread! Thanks for the help!
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.