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();
Не знаете, почему я должен поставить два ввода до того, как он попросит меня ввести число? Кроме того, формула дисперсии выводится как NaN, и я не знаю, почему. Любая помощь будет оценена, спасибо.Сканер не сканирует до двух выходов?
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», а затем объединив части. –