2017-09-28 6 views
-2

私が選択した2つの数字(最小値と最大値)の間の数字を選ぶために私のプログラムが必要です。次に、彼が考えている数字を5つ試してみます。しかし、問題は、コンピュータが本当に限界を解釈していないということです。 min=3max=6 - 結果として、正しい番号が7になるのはなぜですか。私の乱数推測プログラムをデバッグするには?

コードはここにある:

import java.util.*; 

public class Game1 { 
     public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 

    int min = sc.nextInt(); 

    int max = sc.nextInt(); 

    System.out.println("insert a number"); 

     int rand = min + (int)(Math.random() * ((max - min) + 1)); 

     for (int i = 0; i <=5; i++){ 

     int number = sc.nextInt(); 

      if (number == rand){ 

       System.out.println("congratulations! :D"); 
       break; 
      } 

      else if (i < number){ 

      System.out.println("The number is too big"); 

      } 

      else if (i > number){ 

      System.out.println("the number is too small"); 

      } 

      else{ 

      System.out.println("Try again"); 

      }    

      } 

     } 

} 
+1

else-ifの部分を最初に確認してください。なぜ私と番号を比較しているのですか? – Adeel

+1

'number'の代わりにtypo' rand' – nullpointer

+0

'Math'を使う代わりに' Random#nextInt'(https://docs.oracle.com/javase/8/docs)を持つ 'Random'を使うオプションもあります/api/java/util/Random.html#nextInt--)メソッド。 – Shirkam

答えて

1

問題は、ユーザーの答えをチェックし、あなたのif文です。ユーザの入力numberと乱数randを比較する必要があります。代わりに、ループカウンタiを入力と比較しています。

もう1つの問題は、forループが5回ではなく6回繰り返すことです。これを修正するには、i <= 5i < 5に変更します。これは、iが0ではなく1から始まるからです。

最後に、試してメッセージを表示するには、forの外側に移動してください。 breakreturnに変更し、回答が正しいときに表示されないようにします。ここでは修正の全てを一緒に入れている:

for (int i = 0; i < 5; i++) { 
    int number = sc.nextInt(); 

    if (number == rand) { 
     System.out.println("congratulations! :D"); 
     return; 
    } else if (rand < number) { 
     System.out.println("The number is too big"); 
    } else if (rand > number) { 
     System.out.println("the number is too small"); 
    } 
} 

System.out.println("Try again"); 

あなたのランダム生成は結構です - thisポストに従っているようです。

関連する問題