2017-10-28 12 views
-3

このJavaプログラムは、ユーザーに最大値を入力し、その最大値から1の間の乱数を生成するように求められています。ユーザーは、正しい値を得るまで値が何であるかを推測します。ユーザーが間違っていると、プログラムは、ユーザーが高すぎるか低すぎると判断し、推測数を増やします。ユーザーが正しい場合、プログラムは推測の総数を表示し、ユーザーに再試行するかどうかを尋ねます。初級Java秘密番号推測プログラム

私が残している問題は、私が推測を入力するときに、私が高すぎたり、低すぎたり、正しかったりということを伝えることをスキップすることです。なぜこれが起こっているのか分かりませんし、ランダムに発生するようです。

import java.util.Scanner; 

public class GuessNumber 
{ 


public static void main (String [] args) 
{ 

    Scanner in = new Scanner (System.in); //create scanner object 
    int maxNumber = 0; //declare variables 
    int userGuess = 0; 
    int totalGuesses = 0; 
    int secretNumber = 0; 
    String replay = ""; 

    System.out.println("Welcome to the Secret Number Generator!"); 

    do 
    { 
     System.out.println("Please input a maximum value for the secret number and press enter."); //prompt user to input a maximum value 
     maxNumber = in.nextInt(); 

     secretNumber = (int) ((Math.random() * maxNumber) + 1); //generate the secret number 

     System.out.println("A new secret number has been chosen!" 
       + "\nWhat do you think it is? Input your guess and press enter."); //prompt user to input a guess 
     userGuess = in.nextInt(); 

     while (userGuess < secretNumber) //while user's guess is less than the secret number 
     { 
      System.out.println("Sorry, that is too low! Please try again."); //prompt user to input another guess; increment total number of guesses by 1 
      userGuess = in.nextInt(); 
      totalGuesses ++; 
     } 

     while (userGuess > secretNumber) //while user's guess is greater than the secret number 
     { 
      System.out.println("Sorry, that is too high! Please try again."); //prompt user to input another guess; increment total number of guesses by 1 
      userGuess = in.nextInt(); 
      totalGuesses ++; 
     } 

     if (userGuess == secretNumber) //if user guesses correctly 
     { 
      System.out.println("Nice job! Your guess, " + secretNumber + " is correct!" //congratulate and display total number of guesses 
        + "\nTotal number of guesses: " + totalGuesses); 
     } 

     System.out.println("Would you like to play again? Please input \"Yes\" or \"No\" and press enter."); //ask user if they would like to play again 
     replay = in.next(); 

     while (!replay.equalsIgnoreCase("Yes") && !replay.equalsIgnoreCase("No") //in case of invalid input 
       && !replay.equalsIgnoreCase("\"Yes\"") && !replay.equalsIgnoreCase("\"No\"")) 
     { 
      System.out.println("Sorry, that is an invalid input. Please input \"Yes\" or \"No\" and press enter."); 
      replay = in.next(); 
     } 
    } 
    while(replay.equalsIgnoreCase("Yes") || replay.equalsIgnoreCase("\"Yes\"")); //replay while user says yes 

    if (replay.equalsIgnoreCase("No") || replay.equalsIgnoreCase("\"No\"")) //if user says no 
    { 
     System.out.print("Thanks for playing!"); 
    } 

} //end of main method 


} //end of class GuessNumber 

答えて

0

あなたは複数のwhileループがありますが、これは意味をなさないものです。ユーザーが大きい番号を入力し、小さい番号を入力すると、それをスキップします。

あなたは、いくつかのループのトラブルを抱えている、などのような時に簡単な選択構造「他の場合のようなので、多くの不必要なネストされたループを避けてくださいお勧めのよう

while (userGuess != secretNumber){ 
    if(userGuess > secretNumber){ 
    //too high 
    } else if(userGuess < secretNumber){ 
    //too low 
    } else{ 
    //nice got it 
    } 

} 

//do you want to play again 
... 
+1

@msoliman私はupvoteでしたが、私の評判がとても低いので、それは表示されません。確かに私はそれを超えて正しい印をつけるつもりはない。 – Andrasa

0

単一評価条件にはwhileループを使用しないでください。

int guess = readInteger() 
while guess != number 
    if guess < number print "too low" 
    if guess > number print "too high" 
assert guess == number 
print "you guessed correctly; good job!" 

をそしてゲームがいっているゲームループを介してこれを実行します。あなたの3つの内側しばらくは、この(擬似コード)のようなものでループ交換してください。

1

が見えるそのうちの一つに、それらすべてを縮小することができます"または" select case "が機能します。あなたにもあまりにも騒がしくないでください。

あなたのアプリをより予測可能に実行するには、「ゲーム」ロジックをメソッドにスローすることをお勧めします。以下は実行される例です。それがあなたを助けてくれることを願っています!

import java.util.Scanner; 

public class GuessNumber { 

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 
    String replay = ""; 

    do { 
    runGame(); //run method to guess number 
    System.out.println("Play again? Enter Yes or No"); 
    replay = in.nextLine().toLowerCase(); 
    } 
    while(!replay.equals("no")); 
} 

private static void runGame() { 
    Scanner in = new Scanner(System.in); //create scanner object 
    int maxNumber = 0; //declare variables 
    int userGuess = 0; 
    int totalGuesses = 0; 
    int secretNumber = 0; 


    System.out.println("Welcome to the Secret Number Generator!"); 
    System.out.println("Please input a maximum value for the secret number and press enter."); //prompt user to input a maximum value 
    maxNumber = in.nextInt(); 

    secretNumber = (int) ((Math.random() * maxNumber) + 1); //generate the secret number 

    System.out.println("A new secret number has been chosen!" + "\nWhat do you think it is? Input your guess and press enter."); //prompt user to input a guess 
    userGuess = in.nextInt(); 

    while (userGuess != secretNumber) { 
     if (userGuess < secretNumber) { 
      System.out.println("Sorry, that is too low! Please try again."); //prompt user to input another guess; increment total number of guesses by 1 
     } else if (userGuess > secretNumber) { 
      System.out.println("Sorry, that is too High! Please try again."); //prompt user to input another guess; increment total number of guesses by 1 
     } 
     else { 
      System.out.println("Sorry, but that's not right. Try again..."); 
     } 

     totalGuesses++; 
     userGuess = in.nextInt(); 
    } 
    System.out.println("You guessed it! After " + totalGuesses + " tries."); 
    } 
} 
関連する問題