2016-04-14 33 views
0

私はユーザーの入力から10個の整数を取り出し、forループを使用して最小値を見つけようとしています。forループを使用して最小値を見つけよう

ifステートメントを正しく書くのに苦労しています。最初の入力を受け取り、その入力を最小にして次の入力を比較することになっています。

私の最後のprintステートメントは、最後に入力した番号を印刷するだけです。これにより

Scanner scan = new Scanner(System.in); 

int smallest = 0; 
int number = 0; 

for (int i = 1; i <= 10; i++) { 
    System.out.print("Enter a number > "); 
    number = scan.nextInt(); 

    if (number < smallest) { 
     smallest = number; 
    } else { 
     smallest = number; 
    }  
} 
System.out.println("The minimum is " + smallest); 

答えて

6

あなたの問題の1つは、smallest = 0で始まるということです。つまり、入力の1つがゼロ未満の場合にのみ変更されます。これを解決するには2つの方法があります。 int smallest = Integer.MAX_VALUE;

OR

  • 変更のいずれかで

    • スタートさらにsmallest
    • if (number < smallest || i == 1)から

    を更新するための条件は、if場合smallestを更新する必要はありません句が起動しないので、を削除してくださいブロック。

+0

考えられることがあります:最小の値をInteger.MAX_VALUEに初期化しません。 (intが読み込まれない場合は、結果はfalseになります)。 代わりに、最初に入力した整数に初期化し、その後にループを使用します。 – Stultuske

+0

@Stultuske私の2番目の選択肢はあなたの提案と同じです。あなたが好きなら、あなた自身の答えを投稿してください。 –

+0

@Stultuske申し訳ありませんが、私はあなたがすでにそうしていたことに気付かなかった。しかし、あなたがそれを編集したので、あなたは私のアップヴォートを得ました。 –

5

:数が小さいか否かを

if (number < smallest) { 
    smallest = number; 
} else { 
    smallest = number; 
} 

は、あなたはいつも、最小の値を上書きします。

elseブロックを完全に削除すると正常に動作します。

EDIT また、デフォルト値として0を使用しないでください。あなたのelse文を削除します。 あなたは「元最小」

System.out.print("Enter a number > "); 
int smallest = scan.nextInt(); 
    int number = 0; 

    for (int i = 1; i <= 9; i++) { 
    System.out.print("Enter a number > "); 
    number = scan.nextInt(); 
     if (number < smallest) { 
      smallest = number; 
     } 
    } 
+1

答えを完成させるには、最小値を0に初期設定すると間違った結果が得られます。それを最大の整数値に初期化する方が良いでしょう。 – npinti

+0

可能性があります。しかし、要素がない場合。なぜ最初の値を読み込みに値を初期化せず、その後にループを行うのでしょうか? – Stultuske

+0

それはそれを回避する別の方法でしょう。 – npinti

0

ソリューションとして読み出された第1の値を取ります。

if (number < smallest) { 
    smallest = number; 
} 

elseなし。 elseの使用では、毎回smallestの値を入力値に設定します。

1

2つの問題。

1 - (他のブロックを削除)、次のようになります場合は、あなた:

if (number < smallest) { 
smallest = number; 
} 

2 - 見て最初の数は常にそれよりも小さくなるように、あなたは非常に大きな数に最小の初期化する必要があります:

int smallest = Integer.MAX_VALUE; 
+0

は 'smallest = Integer.MAX_VALUE'を使用します。数値が999999であるという悪い考え。 – TomN

+0

@TomN良い点、編集済み – nhouser9

2

は、これが最初assigを作るための私の好みだろうこの

Scanner scan = new Scanner(System.in); 

int smallest = 0; 
int number = 0; 

for (int i = 1; i <= 10; i++) { 
    System.out.print("Enter a number > "); 
    number = scan.nextInt(); 
    if (i == 1){ 
     smallest = number; 
    } 
    if (number < smallest) { 
     smallest = number; 
    } 

} 

System.out.println("The minimum is " + smallest); 
0

のようなものを試してみてください変数smallestに変更してください。 loopが開始される前に、smallestに別々の課題をまとめてください。 この方法では、smallestに割り当てる最初のステートメントが正確にわかります。他のステートメントは、loopifステートメントのelseブロックを取り除くと述べています。

ブロックの問題として示されたOPが最後に入力した番号を出力しています。 N 2つの異なる場所にプロンプ​​トが表示されているので、 'prompt'にString変数を追加して再利用することができます。ループカウントの通知は、ユーザー入力を10回だけプロンプトするだけで、10から9に減少しました。

Scanner scan = new Scanner(System.in); 

     int smallest = 0; 
     int number = 0; 
     String prompt = "Enter a number > "; 

     // First user prompt 
     // and first assignment to 'smallest' 
     System.out.print(prompt); 
     smallest = scan.nextInt(); 

     for (int i = 1; i <= 9; i++) { 
     System.out.print(prompt); 
     number = scan.nextInt(); 

      if (number < smallest) { 
       smallest = number; 
      } 

     } 
     System.out.println("The minimum is " + smallest); 
関連する問題