我正在开发一个项目,您可以在其中创建一个计算机猜测随机数的代码,然后用户说该数字是高还是低。然后计算机应根据用户的说法改变其参数。例如,如果它猜测33并且你说太低而它说74并且它说得太高,则生成的下一个数字将在33到74之间。我的问题是,我可以使用rFinder变量使范围变得更高例如,当RepeatedGuess方法中的UserAnswer = 2时。但是,虽然尝试了很多东西,但我无法获得动态范围或整个代码中的变化。我完全错误地接近这个吗?任何建议都会有所帮助。
import java.util.Scanner;
import java.util.Random;
public class Proj72 {
private static int UserAnswer;
private static int maximum = 100;
private static int minimum = 0;
private static int rFinder;
private static Random generator = new Random();
private static Scanner reader = new Scanner(System.in);
private static int guess = generator.nextInt(100);
public static void main(String[] args) {
FirstGuess();
RepeatedGuesses();
Correct();
}
private static void FirstGuess() {
System.out.print(guess + ": Is this your number? Enter 1 For Yes or enter 2 for Too Low or enter 3 for Too High:");
}
private static void RepeatedGuesses() {
while (1 != UserAnswer) {
UserAnswer = reader.nextInt();
if (2 == UserAnswer) {
rFinder = (int)(generator.nextInt(100 - guess));
guess = rFinder + guess;
System.out.print(guess + ": Is this your number? Enter Yes or enter Higher or enter Lower:");
} else if (3 == UserAnswer)
break;
}
}
private static void Correct() {
if (1 == UserAnswer) {
System.out.print("I got it!");
}
}
}
答案 0 :(得分:0)
private static void RepeatedGuesses() {
while (1 != UserAnswer) {
UserAnswer = reader.nextInt();
if (2 == UserAnswer) {
rFinder = (int) (generator.nextInt(100 - guess));
guess = rFinder + guess;
System.out.print(guess + ": Is this your number? Enter Yes or enter Higher or enter Lower:");
} else if (3 == UserAnswer){
break;
}
//change it
FirstGuess();
UserAnswer = reader.nextInt();
}
}
答案 1 :(得分:0)
跟踪猜测可能的值范围。称这些最小和最大。 Min等于0,max在开头等于100.
猜猜random int between the min and max
每次猜测后:
为了进一步发展,不是每次都选择随机猜测,而是猜测最小值和最大值中间的值,例如: 50为第一次猜测。 这是一个二进制搜索,其中O(log(N))最差和平均时间!