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,則需要;(不是第一個猜測)。