2017-10-04 100 views
0

我正在編寫一個程序,用戶輸入一個數字並且計算機猜到數字。Java循環中的隨機數和if語句

我在我的while循環中發現我的else/if聲明有問題。問題是它打印出"guess higher",但電腦並不總是猜測更高。我不知道如何解決這個問題。

while(computerGuess != userGuess) { 
    if(computerGuess > userGuess) { 
     System.out.println("Guess lower: "); 
     computerGuess = guess.nextInt(userGuess); 
     System.out.println(computerGuess); 
    }else if(computerGuess < userGuess) { 
     System.out.println("Guess higher: "); 
     computerGuess = guess.nextInt(101); 
     System.out.println(computerGuess); 
    } 
    amountTries++; 
} 
+4

提供[mcve]。 – Gendarme

+2

'guess'變量是一個java.util.Random嗎? – 2017-10-04 18:05:32

+1

如果您使用的是'java.util.Random',那麼[請看javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt -int-)。 'nextInt(101)'將返回一個介於0到100之間的隨機數 - 它**不保證比前一個更高。 – 2017-10-04 18:10:34

回答

1

的問題是它打印出「猜高」,但電腦沒有 總是猜測更高。我不知道如何解決這個問題。

您正在爲隨機數生成指定硬編碼限制101。但在計算機猜測小於用戶值的情況下,您需要在計算機猜測和用戶猜測之間生成一個隨機數。

更換

computerGuess = guess.nextInt(101);

computerGuess = guess.nextInt(userGuess - computerGuess) + computerGuess + 1;

+0

這真的很有幫助謝謝。我想我只是沒有足夠的努力去思考如何使用變量來操縱計算機的猜測。 –

+0

@MasonMyers。很高興有幫助。 – VHS

0

如果你正在試圖建立一個程序,其中計算機通過二進制搜索邏輯猜中號碼,然後你的代碼是不是去上班。以下代碼將執行二進制搜索類型的邏輯。

int i=0;int j=101; 
while(computerGuess != userGuess) { 

    if(computerGuess > userGuess) { 
     j=computerGuess; 
     System.out.println("Guess lower: "); 
     computerGuess = guess.nextInt(j); 
     System.out.println(computerGuess); 
    }else if(computerGuess < userGuess) { 
     i=computerGuess; 
     System.out.println("Guess higher: "); 
     //computerGuess = guess.nextInt(101); 
     computerGuess = guess.nextInt(j - i) +i; 
     System.out.println(computerGuess); 
    } 
    amountTries++; 
} 

PS:沒有經過角落案件測試。代碼只是提供一個基本的想法。