2014-10-04 148 views
1

我正在嘗試在Java中建立一個數字猜測遊戲,它與通常的數字不同,你猜數字,程序會告訴你它是高還是低。我試圖建立一個程序猜測數字的地方,你會說它是高還是低,直到程序找到你選擇的號碼。Java猜數字遊戲問題

我遇到了「if」語句,程序猜測的數字太低時出現問題。

的具體問題是在這裏:

if (hilow.equals("l")) 
     { 
      middle = middle * 2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

整個程序到目前爲止是這樣的:

import java.util.*; 

public class NumbGuess 
{ 
    public static void main(String args[]) 
    { 
     int numbGuesses = 0; 
     boolean win = false; 
     int hi = 1000000; 
     int low = 0; 
     Scanner input = new Scanner(System.in); 
     int middle = hi/2; 
     System.out.println(middle); 


    while (win == false) 
    { 
     String hilow = input.nextLine(); 

     if (hilow.equals("h")) 
     { 
      middle = middle/2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("l")) 
     { 
      middle = middle * 2; 
      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("y")) 
     { 
      win = true; 
      System.out.println("It took: " + numbGuesses + " guesses"); 
     } 
    } 
} 
} 

我遇到的問題是一個永久的循環每當數量太少:

enter image description here

我想我需要CH爲了得到一個工作結果,中間由什麼操作。

回答

2

你的邏輯是有缺陷的。當數字太低時,不應該乘以2,而當它太高時,不應該只用2除。

新的猜測應該在範圍的中間。如果你的第一個猜測是500000,並且用戶說它太低,那麼該數字在500000和最大數量(1000000)之間,所以新的猜測應該是(1000000-500000)/2=750000而不是500000*2。如果第一個猜測值太高,則該數字在最小數字(0)和500000之間,所以下一個猜測應該是(500000-0)/2=250000

+0

好吧,謝謝。我是新手,這是我的小寵物項目。你的迴應非常有幫助。 – 2014-10-04 15:11:47

1

你的問題是與高和低if陳述。您需要在每次猜測時調整邊界,例如,如果猜測值過高,則需要將新的high界限設置爲猜測值。同樣,如果猜測值太低,則需要將新的low界限設置爲猜測值。

0

問題不是永久性循環。這個程序正在做你到底在問什麼:

它說500000,你說它除以2(= 250000)。然後,你說它乘以2(= 500000)。到目前爲止......

問題出在你的邏輯上。您應該在程序收到信息時正確確定限制(hilow)。例如,如果程序猜到500000,並且你認爲它太高,現在你的限制在1和499999之間(= 500000-1)。如果它太低,現在你的限制在500001(= 500000 + 1)和1000000之間。你猜你重新計算middle你的hilow(hi+low)/2)。

希望有所幫助。

0

你用來改變計算機猜測的邏輯並不完全正確。你想要做什麼(以及你想要做什麼)是二分查找

在你的例子中,50000太高,25000太低,所以下一個猜測不應該加倍25000,它應該在50000和25000之間,或者類似於37500。

一般來說,你應該追蹤'最高估計太高'和'最高估計太低',下一個猜測應該是他們之間的一半。

0

您應該動態更改,而不是保持它們靜態。根據用戶的響應,程序應該改變的價值,並減少或分別遞增當前中間替換它,然後通過平均新喜設置新中間

這裏是我的嘗試,它似乎工作:

import java.util.*; 

public class NumbGuess 
{ 
    public static void main(String args[]) 
    { 
     int numbGuesses = 0; 
     boolean win = false; 
     int hi = 1000000; 
     int low = 0; 
     Scanner input = new Scanner(System.in); 
     int middle = hi/2; 
     System.out.println(middle); 


    while (win == false) 
    { 
     String hilow = input.nextLine(); 

     if (hilow.equals("h")) 
     { 
      hi = middle - 1; 
      middle = (low + hi)/2; 

      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("l")) 
     { 
      low = middle + 1; 
      middle = (low + hi)/2; 

      System.out.println(middle); 
      numbGuesses++; 
     } 

     if (hilow.equals("y")) 
     { 
      win = true; 
      System.out.println("It took: " + numbGuesses + " guesses"); 
     } 
    } 
} 
}