このプログラムは、ユーザーがプレイすると、元のプログラムと同じように動作するように見えます (実際、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;
}