2017-12-07 109 views
-3

ですが、入力した数字に関係なく、値は平均0.0です。正しい平均値を出力するにはどうすればよいですか?ArrayListに入力された数値を平均したいのですが、平均を計算するのは0.0

import java.util.Scanner; 
import java.io.*; 
import java.util.ArrayList; 

public class Calculation { 
    static Toolkit tools = new Toolkit(); 
    public static void main(String [] args) { 
     double average = 0.0; 
     double sum = 0; 
     int i =0; 
     int num = 0; 
     int nElements = 0; 
     Scanner console = new Scanner(System.in); 

     ArrayList<Integer> value = new ArrayList<Integer>(); 
     System.out.println("Enter value: "); 
     num = console.nextInt(); 
     while(num != 0) { 
      value.add(new Integer(num)); 
     } 

     for(i = 0; i < value.size(); i++) { 
      sum += value.size(); 
     } 
     average = sum/value.size(); 
     System.out.println("Number of values read: " + value.size()); 
     System.out.println("Values sum: " + sum + "Values average: " + 
          average); 
     System.exit(0); 
    } 
} 
+1

'while(num!= 0){value.add(new Integer(num)); } 'これは無限ループになります。なぜなら、あなたが内部にいれば' num'を変更しないので、条件は決して偽にならないからです。あなたが主張しているように合計が正しく働いていることをどのように確認したのか分かりません。 – csmckelvey

+0

はい、正しいです、このコードに 'num = console.nextInt();'を追加するのを忘れました。しかし、私はそれを追加した後、数値を合計しても平均値は0として計算されます。 –

+0

その行を追加してコードを実行すると、合計は正しくなりませんが、誤った合計の平均が正しいことになります。私が5,5,5,0を入力した場合、9.0の平均と3.0の平均が得られます。繰り返しますが、あなたが投稿したコードがあなたが何を記述していないとしても、あなたが見ているものを見ているかどうかはわかりません。 – csmckelvey

答えて

2

今あるとして、あなたが初めてそれ以外の場合は、無限ループにつながる0を入力した場合、ループにのみ終了します。むしろ、次のようなループ内で次の整数を読む必要があります:

また
while(num != 0) { 
    value.add(new Integer(num)); 
    num = console.nextInt(); // add this line 
} 

、この変更:これに

sum += value.size(); 

:あなたとわかるように

sum += value.get(i); 

を各繰り返しでArrayListのサイズの合計を実行するのではなく、ArrayList内の数値を1つの値に減らしたいとします。

1

アオミネは正しいと言いました。しかし、唯一の問題ではありません。あなたのforループの中で、あなたのArraylistのサイズを 'sum'変数に追加します。代わりに保持する値を加算する、つまり合計します。

double average = 0.0; 
    double sum = 0; 
    int i = 0; 
    int num = 0; 

    Scanner console = new Scanner(System.in); 

    ArrayList<Integer> value = new ArrayList<Integer>(); 
    System.out.println("Enter value: "); 
    num = console.nextInt(); 
    while (num != 0) { 
     value.add(new Integer(num)); 
     num = console.nextInt(); 
    } 

    for (i = 0; i < value.size(); i++) { 
     sum += value.get(i); 
    } 
    average = sum/value.size(); 
    System.out.println("Number of values read: " + value.size()); 
    System.out.println("Values sum: " + sum + "Values average: " + average); 
関連する問題