【发布时间】:2021-03-28 11:40:16
【问题描述】:
我正在做一个猜数字游戏:
- 计算机在区间内生成一个数字
- 我尝试猜测它并收到回复,无论它高于/低于我的猜测还是等于我的猜测,我已经赢了
- 有一个我可以猜测的区间,以及一个猜测尝试限制
然而,诀窍是我需要实现另一个条件:每次猜测都应该“缩小”我能够猜测的区间。例如:电脑生成50,我猜是25,电脑回复“随机数较大。”。现在知道了,我不应该再猜测低于 25 的任何东西,这是不合理的。如果我猜到 15,计算机应该回复“猜测没有意义。”。我知道我需要以某种方式将每个猜测值保存到一个新变量中,但似乎没有任何效果。我是初学者,请耐心等待下面的代码,我尝试了很多东西:
public String guess(int guess)
{
int lowerBound = 0;
int upperBound = 99;
Set<Integer> lowerGuesses = new TreeSet<>();
Set<Integer> higherGuesses = new TreeSet<>();
if (gameOver) {
return "The game is over.";
}
if (guess < 0 || guess > 99) {
return "The guess is out of bounds.";
}
if (guessCount < maxGuessCount) {
if (guess < secretNumber) {
if (lowerGuesses.contains(guess)) {
return "The guess doesn't make sense.";
}
else {
guessCount++;
lowerBound = guess;
lowerGuesses.add(guess);
return "The random number is larger.";
}
}
if (guess > secretNumber) {
if (higherGuesses.contains(guess)) {
return "The guess doesn't make sense.";
}
else {
guessCount++;
upperBound = guess;
higherGuesses.add(guess);
return "The random number is smaller.";
}
}
if (lowerGuesses.contains(guess)) {
return "The guess doesn't make sense.";
}
if (higherGuesses.contains(guess)) {
return "The guess doesn't make sense.";
}
}
if (guess < lowerBound || guess > upperBound) {
return "The guess doesn't make sense.";
}
if (guessCount == maxGuessCount) {
gameOver = true;
victorious = false;
return "Ran out of guess attempts.";
}
guessCount++;
gameOver = true;
victorious = true;
return "You won.";
}
提前谢谢你!
【问题讨论】:
-
您可能不必存储所有“lowerGuesses”和“higherGuesses”。只需跟踪最后的猜测,如果它低于“secretNumber”,请确保输入大于最后一个输入,反之亦然。此外,您正在检查猜测是否在“lowerGuesses”/“higherGuesses”中;但是,您不想这样做,因为您希望它在新输入大于以前的输入时仍然返回“猜测没有意义”,而前一个输入应该更小。如果新输入不是猜测之一,则不会通过 if 语句。
-
另外,您似乎多次调用“guess”,这意味着每次“higherGuesses”/“lowerGuesses”中只有一个元素。
-
@DavidLee 我正在尝试存储每个猜测。如果它大于secretNumber,我认为它是猜测的新上边界并将其值分配给upperBound。如果更小,我将其分配给 lowerBound,这是我第一次尝试跟踪该值的方式。但是它被完全忽略了,即使条件“if (guess > lower/upperBound)”也无法识别它。我得到的唯一答复是猜测是否更大/更小。您是否认为问题在于“猜测”被反复调用?我不太明白为什么它的值不保持在 lower/upperBound 甚至猜测集中。
标签: java logic binary-search logical-operators