2017-02-12 2 views
0

У меня проблема с моим кодом, где программа не будет воспроизводиться снова, но также не закончится.Java Guessing Game бесконечный цикл

Код продолжает цикл во внутреннем цикле после выигрыша или слишком много догадок.

Вот мой код:

/** 
* 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; 
       } 
      } 
     } 
    } 
} 
+0

Почему вы спрашиваете: «Какое максимальное количество попыток?» – Sedrick

+0

уточнить вопрос –

ответ

0

Я думаю, что у вас есть две проблемы.

Во-первых, после успешного угадывания числа, которое вы никогда не установили, верните значение false. Поэтому вы никогда не войдете во внутренний цикл во второй раз.

Во-вторых, это упорядочение операторов if/else if, никогда не существует сценария, в котором догадка может достигать финального else if. Каждая ситуация будет подтверждена как истинная в одном из предыдущих трех ifs.

1

Эндрю прав, для того, чтобы закодировать условие, должно быть истинно. Если утверждение else должно быть в правильном порядке. Вот исправление, надеюсь, это поможет.

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."); 
      } 
     } 
    } 
} 
0
/** 
    * 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; 
     } 
     } 
    } 
} 
} 

Найдено вопрос, я думал бы опубликовать ответ в случае, если кто-то может наткнуться на эту тему! Спасибо за помощь!