2017-10-20 109 views
0

这仅仅是一个介绍Comp Sci类的小作业,但我遇到了一些麻烦,我必须提示用户进行验证猜测代码的结果,然后如果它是错误的,它会提示它是否更高或更低等等。我想这样做,所以如果最大范围的数字是12,我会从6开始,然后从那里我会首先问用户:如果它是正确的?如果不是,则询问是否更高或更低。根据他的回答,我的下一个值将介于0和6之间,即3或6和12,即9。我尝试了多种不同的方式,并在网上搜索了一些提示,但没有运气。如果你能用我的代码来帮助我,或者可以指导我一个很好的答案!在Java猜测游戏中遇到了一些麻烦

Scanner in = new Scanner(System.in); 
boolean guess = false; 

int maxMonth = 12; 
int minMonth = 0; 
int month = (maxMonth - minMonth)/2; 
int total = 6; 

while (guess == false) { 
    String yes = "yes"; 
    String no = "no"; 
    int tries = 0; 
    boolean firstGuess = false; 

    System.out.println("Is your birthday in " + month + " yes or no:"); 
    String a1 = in.next(); 

    if (a1.equals(yes)) { 
     firstGuess = true; 
    } else { 
     System.out.println("Is your birthday after this month?"); 
     String a2 = in.next(); 

     if (a2.equals(yes)) { 
      total++; 
      total = (int) total/2; 
      month = month + total; 
     } else { 
      total = total - 3; 
      total = (int) total/2; 
      month = month + total; 
     } 
    } 

    //guesses the day in the month 
    while (firstGuess == true) { } 
} 
+0

你被允许使用树木吗?你可以做一个二叉搜索树,根据它的高低来左右移动 – FattySalami

+1

二进制搜索不需要树 - 只是说。请参阅https://en.wikipedia.org/wiki/Binary_search_algorithm –

+0

在代码中执行该操作,就像在头脑中或解释中所做的那样:您有一个下限和一个更高的界限(最初为1和12)。你猜这个范围的中间数。如果它是正确的,你退出。如果它较低,则将界限更改为[guess + 1,higherBound](即[7,12]),如果更高,则将界限更改为[lowerBound,guess - 1](即[1,5] )并且你继续 –

回答

0

您需要计算循环内的月份值。每次猜测后,如果a2为是,则更新minMonth =月+ 1,如果a2如果不更新maxMonth =月 - 1,并再次循环(重新计算月=(maxMonth - minMonth)/ 2)。

此外,你的循环的条件是while(guess == false)但你永远不会改变猜测的值,所以你永远不能退出循环。如果(a1.equals(yes))guess = true,则需要;(不是第一个猜测)。