System.out.print("This program computes the average and variance of all numbers entered. ");
boolean finished = false;
int total = 0;
Scanner inputScanner = new Scanner (System.in);
double average = inputScanner.nextDouble();
double variance = inputScanner.nextDouble();
while (!finished)
{
System.out.println("Enter a number (or type 'exit'): ");
if (inputScanner.hasNextDouble())
{
total++;
System.out.println(total);
double currentNum = inputScanner.nextDouble();
average = (average) + (currentNum - average)/total;
double prevAverage = ((average * total) - currentNum)/(total - 1);
variance = ((variance * (total - 1)) + (currentNum - prevAverage)
* (currentNum - average))/total;
System.out.println("So far the average is: " + average
+ "\nAnd the variance so far is: " + variance);
}
else if (inputScanner.hasNext("exit"))
{
finished = true;
System.out.println("Thanks for using this program.");
inputScanner.close();
数字を入力する前に2つの入力を入れなければならない理由がわかりません。また、分散式はNaNとして出てきます。なぜ私はその理由がわかりません。どんな助けでも感謝します、ありがとう。スキャナーは2つの出力までスキャンしませんか?
EDIT
double var1 = (variance * (total - 1));
double var2 = (currentNum - prevAverage) * (currentNum - average);
variance = (var1 + var2)/total;
これが今の分散のための私の計算です。どうすれば修正できますか?私が '1'を入力した場合、var2はNaNで、2を入力するとvar1はNanです。
私は入力スキャナの全体を固定しましたが、今は分散を取得する方法を知りましたか? –
明示的にそうでないと明示しないと、Javaはすべての中間結果を 'int'にキャストします。私はあなたの計算を分割して、それぞれの部分を別々の 'double'変数に割り当て、次にそれらの部分を組み合わせることをお勧めします。 –