数字猜谜游戏不断重复相同的问题和猜测

时间:2015-04-03 09:08:04

标签: java loops search while-loop binary-search

如果您运行游戏,您可以看到游戏无法正确猜测的某些数字。例如,如果你的数字是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();
    }
}

1 个答案:

答案 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”课程中未使用的代码,这会让那些试图回答您问题的人感到困惑。