我正在尝试用 Java 构建一个猜数游戏,它不同于通常的猜数游戏,在这种游戏中,您猜测数字,然后程序会告诉您数字是高还是低。我正在尝试构建一个程序猜测数字的位置,然后您说它是高还是低,直到程序找到您选择的数字。
我在“if”语句中遇到问题,程序猜测的数字太低。
具体问题在这里:
if (hilow.equals("l"))
{
middle = middle * 2;
System.out.println(middle);
numbGuesses++;
}
到目前为止的整个程序如下:
import java.util.*;
public class NumbGuess
{
public static void main(String args[])
{
int numbGuesses = 0;
boolean win = false;
int hi = 1000000;
int low = 0;
Scanner input = new Scanner(System.in);
int middle = hi / 2;
System.out.println(middle);
while (win == false)
{
String hilow = input.nextLine();
if (hilow.equals("h"))
{
middle = middle / 2;
System.out.println(middle);
numbGuesses++;
}
if (hilow.equals("l"))
{
middle = middle * 2;
System.out.println(middle);
numbGuesses++;
}
if (hilow.equals("y"))
{
win = true;
System.out.println("It took: " + numbGuesses + " guesses");
}
}
}
}
我遇到的问题是每当数字太低时就会出现永久循环:
我认为我需要更改操作中间件的方式以获得有效结果。
最佳答案
你的逻辑有问题。当数字太低时,你不应该只乘以 2,当它太高时,你不应该只除以 2。
新的猜测应该在范围的中间。如果您的第一个猜测是 500000,而用户说它太小,则该数字介于 500000 和最大数字 (1000000) 之间,因此新的猜测应该是 (1000000-500000)/2=750000
,而不是 500000*2
。如果第一次猜测太大,则数字在最小数字 (0) 和 500000 之间,因此下一次猜测应该是 (500000-0)/2=250000
。
关于Java 猜数游戏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194051/