2017-10-04 31 views
0

私はユーザが数字を入力してコンピュータがその数字を推測するプログラムを書いています。Javaループとif文の乱数

私のelse/ifステートメントの中で、私のwhileループ内に問題があります。問題はそれが"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'ですか? –

+1

'java.util.Random'を使用している場合は、[javadocを見てください](https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt -int-)。 'nextInt(101)'は0と100の間の乱数を返します - 前回よりも高いことが保証されていません**。 –

答えて

1

問題は、それが「高いと思う」プリントアウトしているが、コンピュータが は常に高く推測していません。私はこの問題についてどうやって行くのか分かりません。

乱数の生成には、ハードコードされた制限値101を指定しています。しかし、コンピュータの推測がユーザの値よりも小さい場合は、コンピュータの推測とユーザ推測の間に乱数を生成する必要があります。あなたは、あなたのコードがないコンピュータは、バイナリ検索ロジックによって番号を推測し、プログラムを構築しようとしている場合

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

+0

これは本当に有益でしたありがとうございました。私はちょうどコンピュータを推測するために変数を使う方法について十分に考えていないと思う。 –

+0

@MasonMyers。喜んで助けになる。 – VHS

0

computerGuess = guess.nextInt(101);

を交換してください仕事に行く。以下のコードは、バイナリ検索の種類のロジックを実行します。

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:コーナーケースではテストされていません。コードは基本的なアイデアを提供することです。