Расчет среднего значения целочисленных входов в массиве - PullRequest
0 голосов
/ 10 октября 2019

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

Кто-нибудь знает, как решить эту проблему?

Вот мой код:

public static void main(String[] args) throws IOException {
    Scanner sc = new Scanner(System.in);
    ArrayList<Integer> numbers = new ArrayList<>();

    while (sc.hasNextInt()) { // this loop breaks there is no more int input.
        numbers.add(sc.nextInt());

        int l = numbers.size();

        double total = 0;

        for (int i = 0; i < numbers.size(); i++) {

            total = total + numbers.get(i);

            double average = total / numbers.size();
            System.out.println("The average is: " + average);
        }
        System.out.println(numbers);
    }
}

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

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

Ваша программа должна быть разбита на отдельные шаги, которыедолжно происходить одно за другим, а не все сразу:

  1. Извлечение ввода от пользователя, добавление каждого целого числа в список

  2. Loop throughвсе целые числа в списке, добавив к total

  3. Рассчитать среднее

  4. Показать результаты

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    ArrayList<Integer> numbers = new ArrayList<>();

    while (sc.hasNextInt())
        numbers.add(sc.nextInt());
    sc.close(); // Remember to close the input stream when finished

    double total = 0;
    for (int num : numbers) // Loop through all ints in the list
        total += num; // Add each int to total

    double average = total / numbers.size();
    System.out.println("The average is: " + average);
    System.out.println(numbers);
}
0 голосов
/ 10 октября 2019

Это должно исправить вашу проблему. Документация для Java для каждого цикла: https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html

    public static void main(String[] args) throws IOException {
       
        double total;
        double average;
        
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        while (sc.hasNextInt()) { // this loop breaks there is no more int input.
            numbers.add(sc.nextInt());

            int l = numbers.size(); //this line is redundant as its never used 
            
            //this is a different and more efficient way to traverse through the list for this               //problem, check comment for the documentation
            for (int currentNumberInList : numbers) {
                total = total + currentNumberInList;
            }
            System.out.println(numbers); //this only prints the numbers you 
                                         //stored in the list
            average = total / numbers.size();
            System.out.println("The average is: " + average);

        }
    }
0 голосов
/ 10 октября 2019
  public static void main(String[] args) throws IOException {

        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        while (sc.hasNextInt()) { // this loop breaks there is no more int input.
            numbers.add(sc.nextInt());

            int l = numbers.size();

            double total = 0;


        }

for (int i = 0; i < numbers.size(); i++) {

                total = total + numbers.get(i);

                double average = total / numbers.size();
                System.out.println("The average is: " + average);
            }

            System.out.println(numbers);

}

...