如果您运行游戏,您可以看到游戏无法正确猜测的某些数字。例如,如果你的数字是13,游戏将循环两次太多,并且还会猜测你的数字为12而不是13.我认为这是计数的一个问题,但我已经尝试重复跟踪循环但是找不到错误。我认为问题主要在于我的while循环。
//import statements
import java.util.Scanner;
public class Numbers
{
public static void binarySearch()
{
int position=0;
String answer;
int upper_BOUND=100;
int lower_BOUND=0;
Scanner input=new Scanner(System.in);
while( (lower_BOUND <= upper_BOUND))
{
position = (lower_BOUND + upper_BOUND) / 2;
System.out.println("Is your value greater than " + position + "?");
answer=input.next();
if((upper_BOUND-lower_BOUND<=1))
{
break;
}
if (answer.equals("no")) // If the number is > key, ..
{ // decrease position by one.
upper_BOUND = position --;
}
if(answer.equals("yes"))
{
lower_BOUND = position ++; // Else, increase position by one.
}
}
System.out.println("Is your number " + position + "?");
String answer2=input.next();
System.out.println(position+" is the answer.\n Thank you for playing the guessing game.");
//else
// System.out.println("Bruh pick a number from 1 to 100 ");
}
}
...... 测试员班级
public class NumberGuesser
{
public static void main(String[] args)
{
int[ ] num = new int [100];
// Fill array
for (int i = 0; i <= 99; i++)
num[i]=i;
//The search method
Numbers.binarySearch();
}
}
答案 0 :(得分:0)
你的问题应该是你在“lower_BOUND = position ++;”中所做的增量,这里发生的是当你增加位置值时,“++”首先递增然后将值赋给位置变量。实际上,下限并未指定增加的位置值,而是指定位置的旧值。所以请更改为“lower_BOUND = ++ position;”
如下所示
if(answer.equals("yes"))
{
lower_BOUND = ++ position ; // Else, increase position by one.
}
我的建议是检查你的“if((upper_BOUND-lower_BOUND&lt; = 1))”条件。我想条件应该是这样的“if((upper_BOUND-lower_BOUND == 0))”
请删除“NumberGuesser”课程中未使用的代码,这会让那些试图回答您问题的人感到困惑。