2014-12-13 58 views
1

所以我做了这个游戏,我选择了一个随机数字1-100,并且计算机猜测,我告诉它太高,太低或者其他。它工作得很好,除了当我尝试二进制搜索时陷入循环,而我似乎无法阻止它。我将演示:数字猜测游戏不断重复?

说这个数字是79.最终,程序会询问数字是否为42.不,那太低了。然后它会问是否71.猜测更高!然后它问82.不,降低。然后它回到42,循环重复一遍又一遍。这里是我的代码(注意,这是从完整代码的摘录,所以借口缺乏的JOptionPane和诸如此类的进口):

int x = 50; 
int y = x; 
int[] alreadyGuessed = {}; 
boolean secondGuess = false; 
//The user has to select, too high, too low, correct! 
while (secondGuess == false) { 
    Object[] options = {"Too high", "Too Low", "Correct"}; 
    int pick = JOptionPane.showOptionDialog(null, "Is your number " + x 
      + "?", "Guess", 
      JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, 
      null, options, options[2]); 
    for (int positionInList = 0; positionInList >= 100; positionInList++) { 
     arrayDemo(x, positionInList); 
    } 

    if (pick == 0) { 
     int max = x - 1; 
     int min = 0; 
     x = ((max + min)/2); 
    } 

    if (pick == 1) { 
     int max = 100; 
     int min = x+1; 
     x = ((max + min)/2); 
    } 
    if (pick == 2) { 
     System.out.println("Yay! I win!"); 
     secondGuess = true; 

    } 

} 
+1

为什么当人选择“过高”时,将'min'设置为零?当人选择“太低”时,为什么要将'max'设置为100?你在哪里跟踪'min'和'max'猜测? – 2014-12-13 01:41:06

+0

哎呦,把它弄倒了 – Tim 2014-12-13 01:45:50

+1

如果猜测太低,你应该做的就是把分钟提高到比猜测更多,对吗?如果猜测太高,你应该做的就是将最大值降低到小于猜测值,对吗?为什么在每种情况下都改变最小值和最大值? – 2014-12-13 01:47:52

回答

1

你需要跟踪这两个最大和最小的。因此,在你的代码中,当你说max = 100min = 0时,程序忘记了最小值是多少。

删除那些行&你应该没问题。从本质上讲,你需要一直记住最大,直到找到答案。

例如如果数字是42,最小和最大将如下所示:

0..100, guess 50 (too high) 
0..49, guess 25 (too low) 
26..49, guess 38 (too low) 
39..49, guess 44 (too high) 
39..43, guess 41 (too low) 
42..43, guess 42 WIN! 

请注意最小和最大放大答案。将这些信息传递给战略是正确的。

+0

但是,如果我取出这些行,最大值和最小值都没有定义,我不能在if语句之外进行操作,因为每次用户按下按钮时,都会将最大值设置为100,最小值再次设置为0。 – Tim 2014-12-13 01:55:44

+1

在程序开始时,在主循环之外定义min = 0(或1)和max = 100。 'min = 0 max = 100 x = 50' – Rob 2014-12-13 01:56:46

+1

顺便说一句,如果程序每次按下按钮都会丢失状态,那么它就不会起作用。你需要找到一些方法来进行每次猜测的最小和最大前进。 – Rob 2014-12-13 01:58:52