Возникли проблемы с вычислением среднего нечетного числа в списке

Наш профессор дал нам список из 982 чисел в текстовом файле, и мы прочитали текст из файла и распечатали некоторую информацию о числах. Пока у меня все правильно (она дала нам правильные ответы), кроме суммы нечетных чисел. Я не могу понять, как получить среднее значение нечетных чисел, которое равно 48201,56.

Я продолжаю получать результат 97354, что странно, потому что я следую тому же методу, который использовал для нахождения среднего значения всех чисел и среднего значения четных чисел.

        import java.io.*;
        import java.util.*;
        public class Homework1sem2
        {
           public static void main(String args[]) throws IOException
           {
              System.out.println("Student name: Ethan Creveling "
              + "\nEmail: [email protected]");
              double f = 0;
              double e = 0;
              double d = 0;
              int c = 0;
              int b = 0;
              int a = 0;
              File myFile = new File("numbers.txt");
              Scanner inputFile = new Scanner(myFile);
              while (inputFile.hasNext())
              {
                 int i = inputFile.nextInt();
                 a++;
                 d += i;

                 if(i%2 == 0)
                 {
                    b++;
                    e += i;
                 }
                 else
                    c++;
                    f += i;
              }
              System.out.println("Total number: " + a);
              System.out.println("Total even number: " + b);
              System.out.println("Total odd number: " + c);
              System.out.println("Total average: " + d/a);
              System.out.println("Total even average: " +e/b);
              System.out.println("Total odd average: " + f/c);


           }


        }

Я хотел бы знать, почему ответ на «Общее нечетное среднее» не равен 48201,56. Спасибо


person Ethan Creveling    schedule 21.01.2019    source источник
comment
Возможный дубликат Это нормально, если я опускаю фигурные скобки в Java?   -  person Tom    schedule 21.01.2019


Ответы (2)


f += i; выполняется вне оператора else, что означает, что он вызывается в каждом цикле while. Если вы проверите свои значения, вы обнаружите, что и f, и d являются одним и тем же значением.

Если вы инкапсулируете свой оператор else следующим образом, это должно решить проблему.

else {
  c++;
  f += i;
}
person Graham Sant    schedule 21.01.2019

Ваш оператор else выполняет только операцию c++;.

Заключите его в скобки следующим образом:

else {
  c++;
  f += i;
}
person Default    schedule 21.01.2019
comment
@JoakimDanielson общее количество (как c) относится к общему количеству вхождений нечетных чисел, а не к сумме. Хотя маркировка немного сбивает с толку. f - сумма нечетных чисел. Следовательно, f/c является правильным вычислением среднего нечетного числа. - person Default; 21.01.2019
comment
Я удалил свои комментарии, потому что, как указал @Tom, я сосредоточился на чем-то второстепенном. Извиняюсь. - person Joakim Danielson; 21.01.2019