Моя программа не выводит правильные десятичные числа среднего арифметического c. Как я могу это исправить? - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно отобразить правильное арифметическое c среднее значение для серии целых чисел, введенных пользователем. Если пользователь вводит 6, 9, 7 и 4, среднее значение должно составлять 6,5, но вместо этого отображается 6,0. Почему это происходит? Я использовал ArrayList для хранения всех целых чисел.

import java.util.Scanner;
import java.util.*;
import java.util.Collections;

public class QuizScoreStatistics
{
    public static void main(String[] args) {
        List<Integer> Scores = new ArrayList<Integer>();

        Scanner input = new Scanner(System.in);
        int i = 0;
        int a = 0;

        while(a != 99) {
            System.out.println("Enter scores");
            a = input.nextInt();
            if(a != 99) {
                if ( a > 10 || a < 0) {
                    System.out.println("Score must be between 10 and 0");
            }
            else {
                Scores.add(a);
            }

            i++;
        } 
    }
        int max = Collections.max(Scores);

        int min = Collections.min(Scores);

        int sum = 0;

        double averg = 0;

        for( i = 0; i <= Scores.size() - 1; i++) {
             sum += Scores.get(i);
        }
        averg = sum / Scores.size();

        System.out.println("Scores entered " + i);

        System.out.println("Highest score " + max);

        System.out.println("Lowest score "+ min);

        System.out.println("Average: "+ averg);
    }
}

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

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

Вы правильно определили, что ваш averg является двойным, потому что ваш ответ может дать что-то вроде 6,7 или 2,3 или что-то еще. Это правильное предположение, чтобы сделать! Однако во время вашего «арифметического c процесса» вы используете целые числа для деления, которое будет выглядеть как целое число. Я повторю, что фактическое РАЗДЕЛЕНИЕ происходит с двумя целыми числами, вы можете увидеть, откуда исходит ошибка?

Если вам нужно больше пу sh, чтобы увидеть точное средство решения этого вопроса, я бы указал вам здесь https://programming.guide/java/wrong-results-for-division.html

0 голосов
/ 20 апреля 2020

Хорошо, вот как работает оператор "/".

int / int => int
int / float => float
float / int => float

Поскольку вы выполняете деление int (int / int), результатом будет int, теряющая десятичную информацию. Если вы хотите, чтобы ваше деление было плавающим или двойным, у вас есть два варианта: либо вы объявляете сумму двойным, либо можете просто разыграть деление, поэтому оно становится двойным, а не целым.

averg = (double) sum / Scores.size();
0 голосов
/ 20 апреля 2020

Попробуйте averg = (1.0 *sum) / Scores.size();
, потому что int/int => int, но double/int=>double

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...