2017-02-12 18 views
0

私のコードに問題がありますが、プログラムは再び再生されませんが、 も終了しません。Javaの推測ゲーム無限ループ

コードは、勝利またはあまりにも多くの推測の後、内部whileループでループし続けます。私はあなたが二つの問題があると思う

/** 
* 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に戻します。だから、内側のループにもう一度入ることはありません。

2番目はif/else ifステートメントの順序です。推測が最後のelseに到達できるシナリオはありません。前の3つのifのいずれかですべての状況が真であると検証されます。

1

Andrewが正しいです。条件をループするためにはtrueにする必要があります。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; 
     } 
     } 
    } 
} 
} 

、問題を見つけ、私は他の誰がこのスレッドにつまずく可能性がある場合の答えを投稿だろうと思いました!助けてくれてありがとう!