Java 随机数猜测游戏,每次猜测后有限制
我正在做一个数字猜测游戏:Java 随机数猜测游戏,每次猜测后有限制,java,logic,binary-search,logical-operators,Java,Logic,Binary Search,Logical Operators,我正在做一个数字猜测游戏: 计算机在一个区间内生成一个数字 我试着猜测,然后收到回复,无论是高于/低于我的猜测,还是等于我的猜测,我都赢了 有一个时间间隔,我可以猜测,以及猜测尝试极限 然而,诀窍是,我需要实现另一个条件:每次猜测都应该“缩短”我能够猜测的时间间隔。例如:计算机生成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.";
}
公共字符串猜测(int-guess)
{
int lowerBound=0;
int上限=99;
设置LowerGuesss=新树集();
Set higherGuesses=new TreeSet();
如果(游戏结束){
return“游戏结束了。”;
}
如果(猜测<0 | |猜测>99){
return“猜测超出范围。”;
}
if(猜测计数<最大猜测计数){
如果(猜测<秘密数){
if(lowerguesss.contains(猜测)){
return“猜测没有意义。”;
}
否则{
猜数++;
lowerBound=猜测;
添加(猜测);
返回“随机数较大。”;
}
}
如果(猜测>秘密数字){
if(higherGuesses.contains(猜测)){
return“猜测没有意义。”;
}
否则{
猜数++;
上限=猜测;
高级。添加(猜测);
返回“随机数较小。”;
}
}
if(lowerguesss.contains(猜测)){
return“猜测没有意义。”;
}
if(higherGuesses.contains(猜测)){
return“猜测没有意义。”;
}
}
if(猜测<下界| |猜测>上界){
return“猜测没有意义。”;
}
如果(猜测计数==最大猜测计数){
gameOver=true;
胜利=错误;
return“猜测尝试已用尽”;
}
猜数++;
gameOver=true;
胜利的=正确的;
返回“您赢了。”;
}
提前谢谢你 首先,为了避免混淆,让我们重命名该方法,以确保其名称与其参数不完全匹配,因此它应该是这样的:
public String makeGuess(int guess)
避免在同一名称空间中使用完全相同的名称命名不同的实体(局部变量存在于不同的方法或参数中,但出于初始化目的,具有类似名称的数据成员除外)。例如,从现在起,您将调用该方法作为makeGuess(25)
现在,我们来谈谈实际问题。你的假设不正确。您假设需要跟踪过去的时间间隔。事实并非如此。您可以只更改间隔的边。另外,您的代码是多余的,我建议您重构它。最后,您总是将上界、局部界以及较高和较低的猜测初始化为局部变量,因此它们永远不会被跟踪。相反,您需要执行以下简单的措施来实现此功能:
将边界和限制定义为数据成员
注意,我已经硬编码了一些值。您可能希望通过初始化之类的东西使其动态化,但这超出了答案的范围<代码>下边界,高边界
,限制
是游戏设置。而lb
,hb
,guessCount
代表游戏状态。您可以将此逻辑拆分为另一个类
,但是为了简单起见,即使我的编程方式不同,我还是将它们留在这里
有一个初始化游戏的方法
因此,您需要将游戏初始化与启动和维护游戏的外部逻辑分开
以一种简单的方式实现makeGuess
公共字符串makeGuess(int guess){
如果(++guessCount>=limit)返回“游戏结束。”;
否则如果((lb>guess)|(hb
注意:我不喜欢将逻辑与输出层混淆,我在上面的方法中这样做的原因是您提到您是一名初学者,我的目的是让刚刚开始编程且非常困惑的人能够理解这个答案。对于实际的解决方案,您应该返回一个状态,并在不同的层进程中返回该状态并执行所需的控制台/UI操作。我现在不讨论细节,因为它也超出了范围,但现在,请在上面的解决方案中取得一些成功,但接下来您肯定应该研究如何编写代码,因为这几乎与使代码正常工作一样重要。您可能不必存储所有的“Lowergues”和“Highergues”只需跟踪最后一次猜测,如果它低于“secretNumber”,请确保输入大于最后一次输入,反之亦然。此外,您正在检查猜测是否在“Lowerguesss”/“Higherguesss”中;然而,你不想这样做,因为你想要它
protected int lowerBound = 0;
protected int higherBound = 99;
protected int lb = 0;
protected int hb = 99;
protected int limit = 5;
protected int guessCount = 0;
protected int randomizedNumber; //Initialize this somewhere
public void initialize() {
lb = lowerBound;
hb = higherBound;
guessCount = 0;
}
public String makeGuess(int guess) {
if (++guessCount >= limit) return "The game is over.";
else if ((lb > guess) || (hb < guess)) return "The guess doesn't make sense";
else if (randomizedNumber == guess) return "You won.";
else if (guess < randomizedNumber) {
hb = guess;
return "The random number is smaller.";
} else {
lb = guess;
return "The random number is larger.";
}
}