Стандартное отклонение, используемое для цикла, не нарушает - PullRequest
0 голосов
/ 18 октября 2019

Мне нужно создать программу, которая запрашивает у пользователя оценки от 0 до 100. Когда они вводят -1, это означает, что они закончили ввод оценок. Мне нужно поставить счетчик, среднее значение и стандартное отклонение, но по какой-то причине выход для стандартного отклонения действительно отключен. Например, при вводе 50 дважды мое стандартное отклонение составляет 494,97.

import java.util.Scanner;
public class Grade {
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);

  System.out.println("Enter a grade between 0-100?");
  int grade = scanner.nextInt();
  int[] grades = new int[100];
  double sum = 0;
  int i = 0;

  while (grade != -1) {
   grades[i] = grade;
   i++;
   sum += grade;
   System.out.println("Enter a grade between 0 100?");
   grade = scanner.nextInt();
  }

  double sumOfDifference = 0;
  double average = sum / i;

  for (int k = 0; k < grades.length; k++) {
   double difference = (grades[k] - average) * (grades[k] - average);
   sumOfDifference += difference;
  }

  double s = Math.sqrt(sumOfDifference / (i - 1));
  System.out.printf("Count: %4d\n", i);
  System.out.printf("Average: %.2f\n", average);
  System.out.printf("Standard Deviation: %.2f\n", s);
 }
}

1 Ответ

0 голосов
/ 18 октября 2019

Здесь у вас есть

for (int k = 0; k < grades.length; k++) {
   double difference = (grades[k] - average) * (grades[k] - average);
   sumOfDifference += difference;
  }

Обратите внимание, что это проходит через все элементы оценок, включая элементы, которые еще не инициализированы. Это можно исправить, пройдя только первые элементы i, введенные пользователем.

for (int k = 0; k < i; k++) {
   double difference = (grades[k] - average) * (grades[k] - average);
   sumOfDifference += difference;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...