2016-04-05 15 views
1

私は、ユーザーからの多くの入力を受け取り、最大数(最高数)分(最低数)と平均を生成する簡単なプログラムを作成しようとしています。Whileループは無視されます

これまではコードを書いていましたが、2番目と3番目のwhileループは無視されていました。私はprintlnを出力してこれをテストしました。私はJavaに新しいですが、どんな助けもありがたいです:)

public void analyseInput() { 
    UI.clearText(); 

    UI.print("input (end with 'done')");   
    double sum = 0; 
    double i=0; 

    for(i=0; UI.hasNextDouble(); i++){     //average 
     double amt = UI.nextDouble(); 
     sum = (sum + amt); 
    } 

    UI.println("test0"); 

    int maxAge = 0; 
    while(UI.hasNextDouble()){        //max 
     int age = UI.nextInt(); 
     while(age>maxAge){ 
      maxAge = age; 
      UI.println(maxAge); 
     } 
    } 

    double minAge = 0; 
    while(UI.hasNextDouble()){        //min 
     double age = UI.nextDouble(); 
     if(age<minAge){ 
      minAge = age; 
     } 
    } 

    double average = sum/i; 
    UI.nextLine();         // to clear out the input 
    UI.println(average); 
    UI.println(minAge); 

} 
+1

whileループの条件は 'UI.hasNextDouble()'です。倍数が残っていない場合、これはfalseと評価され、明らかにループに入りません。 –

答えて

4

forループを取り出してください。

これを使用すると、空のui.doublesになります。

さらに、スタックを2回反復する代わりに、最大、最小、平均の計算を1つのループで行うこともできます。ソートされたリストでのみ動作するので、あなたの最大値とファインダーは正しくありません。リストがすでにソートされていれば、そのどちらかの端を見ることになります。

0

データのセットの最小年齢、最大年齢、平均が必要な場合は、それを一度に解析するのではなく、一度に行うことができます。あなたは(平均、最大、最小、)単一while-loop内のすべての操作を行うと、あなたの変数権利を初期化する必要があります

public void analyseInput() { 
    UI.clearText(); 

    UI.print("input (end with 'done')");   
    double sum = 0; 
    double i=0; 
    double maxAge = Double.MIN_VALUE, minAge = Double.MAX_VALUE; 

    for(i=0; UI.hasNextDouble(); i++){     //average 
     double amt = UI.nextDouble(); 
     sum = (sum + amt); 
     maxAge = Math.max(amt, maxAge); 
     minAge = Math.min(amt, minAge); 
    } 

    double average = sum/i; 
    UI.nextLine();         // to clear out the input 
    UI.println(average); 
    UI.println(minAge); 
} 
-1

。新しいdouble値のそれぞれに、minおよびmax変数を更新します。アキュムレータにすべての値を加算し、ループの後の平均を計算します。

関連する問題