-3

このプログラムは、ユーザーがプレイすると、元のプログラムと同じように動作するように見えます (実際、2 つのゲームをプレイしている人は、それらを区別できないはずです)。 元のプログラムでは、ユーザーは 1 から 100 までの乱数を推測します。すべての推測の後、ユーザーが正しく推測するまで、プログラムは数値が推測よりも大きいか小さいかを返します。

ただし、このプログラムはごまかします。1 から 100 の範囲で乱数を選択するのではなく、プログラムは隠された数字をまったく考えずに、ユーザーにできるだけ多くの推測をさせるような方法で答えます。

どうすればこれを実現できますか? if else ステートメントなどの for ループを実行する必要がありますか? 今考えられる唯一のことは、大量の if else を作成することであり、それが機能するかどうかさえわかりません。

この内部の if else のアイデアを続行する必要がありますが、より具体的になる必要がありますか? もっと良い方法があるに違いないと感じています。

アップデート*

わかりましたので、私が最初に来た目的を理解したと思いますが、推測のために上限と下限のオプションが等しい数値を選択すると、プログラムが無限ループに陥ります。理由はありますか?

    public static int feedback (Scanner console, int guess, int max) {
        String sorry = "Sorry, that guess is incorrect.";
        String lower = "The number I am thinking of is lower.";
        String higher = "The number I am thinking of is higher.";   
        int guessCount = 0;
        guess = console.nextInt();
        int upperBound = max + 1;
        int lowerBound = 0;
        if (guess <= max && guess >= 1) {
            guessCount = guessCount + 1;
             if (max - guess < guess) { 
                    System.out.println(sorry);
                    System.out.println(lower);
                    System.out.print("Your guess? ");
                    upperBound = guess;
                    guess = console.nextInt();
                    guessCount = guessCount + 1;
             } else {
                    System.out.println(sorry);
                    System.out.println(higher);
                    System.out.print("Your guess? ");
                    lowerBound = guess;
                    guess = console.nextInt();
                    guessCount = guessCount + 1;

             while (upperBound - lowerBound > 2) {
                 if (guess <= max && guess >= 1) {
                     if ((lowerBound + ((upperBound - lowerBound)/2)) < guess) { 
                         System.out.println(sorry);
                         System.out.println(lower);
                         System.out.print("Your guess? ");
                         upperBound = guess;
                         guess = console.nextInt(); 
                         guessCount = guessCount + 1;
                     } else {
                            System.out.println(sorry);
                            System.out.println(higher);
                            System.out.print("Your guess? ");
                            lowerBound = guess;
                            guess = console.nextInt();
                            guessCount = guessCount + 1;
                            }
                } else {
                    System.out.println("Your guess must be in the range 1-" + max + ". Try again.");
                }
                    }
                    System.out.println("Yes, the number I was thinking of was " + guess);
                }
             } else {
            System.out.println("Your guess must be in the range 1-" + max + ". Try again.");
            return guessCount;
        }
        return guessCount;
        }
4

2 に答える 2

0

各推測により、使用可能な数値の範囲が分割されます。

最初の推測の前は、数字は 1 から 100 までのいずれかである可能性があります。ユーザーが「60」と推測したとします。これにより、60 未満、60 に等しい、または 60 を超える 3 つの可能性が得られます。

ここで、これら 3 つの可能性のうちどれがユーザーの推測を最も長く続けるかを決定する必要があります。ヒントをあげましょう。ユーザーが推測できる数字が 1 つだけ残るまで、ユーザーが正しいとは言いたくないので、最初の推測として「60」を絶対に受け入れないでください。

入力を受け入れ、入力に基づいて応答方法を決定するループを作成できるはずです。たとえば、ユーザーの最初の推測が "99" である場合、プログラムに "大きすぎる" と表示させる必要があります。答えが 1 つだけになるまで、ループを実行し続けます。

頑張って楽しんでね!

于 2013-10-18T02:35:28.020 に答える