1

私の「If」ステートメントは書き込みの答えを与えていません。たとえば、「5」を入力すると出力が高すぎます。これは乱数が低いことを意味しますが、「4」のように小さい数値を入力すると出力が低すぎます。乱数が大きいことを意味します。かなり紛らわしいですが、コード内の私のロジックが正しいかどうか疑問に思っています??

java.util.Scanner をインポートします。java.lang.Math をインポートします。

public class GuessTest {

public static void main(String[] args) 
{
   System.out.println("Welcome to the gussing game, Try to guess the number am thinking of to win!");
   System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
   System.out.println();

    System.out.println("Am thinking of a number between 0 and 10. Try to guess it.");
    System.out.println();

   Scanner sc = new Scanner(System.in);
   String choice =  "y";

   while (!choice.equalsIgnoreCase("n"))
   {

     System.out.println("Enter the Number:");
       int guess = sc.nextInt();
       double rightNum = Math.random() *10;
       int randomNum = (int) rightNum;


       if (guess == randomNum)
       {
           System.out.println("Correct you've got it! The Number Was " + randomNum );
           System.out.println();
           System.out.println("Would you like to play again (y/n):");
           choice = sc.next();
       }
     else  if (guess < randomNum)
       {
           System.out.println("your too low!");
       }
     else if (guess > randomNum)
       {
            System.out.println("Your too high!");
       }   

}

}
}   
4

3 に答える 3

4

while-loop各反復で乱数を計算しています。計算コードをループの外に移動して、一度計算するだけです。

double rightNum = Math.random() *10;
int randomNum = (int) rightNum;
while (!choice.equalsIgnoreCase("n")) {
    //your logic...
}

いくつかのゲーム ラウンドを行いたいので、新しいゲームを受け入れるときに乱数を再計算できます。

double rightNum = Math.random() *10;
int randomNum = (int) rightNum;
while (!choice.equalsIgnoreCase("n")) {
    //your logic...
    if (guess == randomNum) {
        System.out.println("Correct you've got it! The Number Was " + randomNum );
        System.out.println();
        System.out.println("Would you like to play again (y/n):");
        choice = sc.nextLine();
        if (choice.equalsIgnoreCase("y")) {
            rightNum = Math.random() *10;
            randomNum = (int) rightNum;
        }
    }
    //your logic...
}
于 2013-02-19T02:19:39.907 に答える
0

すでに提案されていることから何も奪わないために、これはそれを行うことができる単純な「別の」方法です...

public class GuessWhat {

    public static void main(String[] args) {
        System.out.println("Welcome to the gussing game, Try to guess the number am thinking of to win!");
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        System.out.println();

        System.out.println("Am thinking of a number between 0 and 10. Try to guess it.");
        System.out.println();

        Scanner sc = new Scanner(System.in);
        String choice = "y";

        int randomNum = -1;
        while (!choice.equalsIgnoreCase("n")) {

            if (randomNum < 0) {
                randomNum = (int) (Math.random() * 10);
            }

            System.out.println("Enter the Number:");
            int guess = sc.nextInt();


            if (guess == randomNum) {
                System.out.println("Correct you've got it! The Number Was " + randomNum);
                System.out.println();
                System.out.println("Would you like to play again (y/n):");
                choice = sc.next();
                randomNum = -1;
            } else if (guess < randomNum) {
                System.out.println("your too low!");
            } else if (guess > randomNum) {
                System.out.println("Your too high!");
            }

        }

    }
}

randomNum基本的に、が0未満の場合は、ランダム値を再計算するだけです。ユーザーが正しく推測した場合は、をにリセットrandomNumするだけです。-1

于 2013-02-19T02:50:04.540 に答える
0

まあ、あなたの論理は正しいですが、コードにはかなり欠陥があります。プログラムに乱数を生成させ、それが高すぎるか低すぎるかに基づいてプレーヤーに推測させますが、コンピューターに毎回異なる乱数を選択させます。

置いてみる

double rightNum = Math.random() *10;
int randomNum = (int) rightNum;

while ループのすぐ外側。これで問題が解決する可能性があります (ただし、続行するという選択に関しては、さらに多くのことが発生します)。

于 2013-02-19T02:31:16.657 に答える