Лучший способ сделать программу, которая вычисляет сумму и среднее значение в java

Я сделал программу командной строки java для вычисления суммы и среднего числа произвольной серии чисел, но мне интересно, есть ли лучший способ сделать ее короче и, возможно, без массива?

public class Main {

    public static void main(String[] args) {
        System.out.println("------------------");
        System.out.println("Program for calculating sum and average of an arbitary series of numbers");
        System.out.println("------------------");

        Scanner input = new Scanner(System.in);

        System.out.print("How many numbers do you want to calculate? ");
        int nums = input.nextInt();
        int array[] = new int[nums];
        int sum = 0;

        for (int i=0; i<nums; i++){
            System.out.print("Enter " + (i+1) + ". number: ");
            array[i] = input.nextInt();
        }

        for (int i=0; i<array.length; i++){
            sum= sum + array[i];
        }
        System.out.println("Sum is: " + sum);
        System.out.print("Average is: " + (sum/nums));
    }
}

Для начала не нужно складывать вещи в массив.

Andy Turner 25.06.2018 15:23

Если этот код работает, он лучше подходит для Проверка кода.

Andy Turner 25.06.2018 15:24

@AndyTurner Итак, что мне использовать вместо массива, посоветуйте мне. И обязательно проверю код ревью. Спасибо.

BaDnja 25.06.2018 15:34

Переменная типа int. sum += input.nextInt();.

Andy Turner 25.06.2018 15:35

В дополнение к предложению Энди ... Также вам понадобится counter для average

Yahya 25.06.2018 15:36

@Yahya У него уже есть переменная nums для этого.

Emile Pels 25.06.2018 15:38

@EmilePels Да, но ему не нужно дважды спрашивать пользователя, использует ли он переменную counter

Yahya 25.06.2018 15:39

@Yahya Он не спрашивает пользователя два раза, он спрашивает пользователя один раз, сколько цифр они хотят ввести. Использование другого имени для этой переменной nums ничего не изменит.

Erwin Bolwidt 25.06.2018 15:49

@ErwinBolwidt Я не видел, что ему нужен nums в for-loop, вот и все.

Yahya 25.06.2018 15:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
9
134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

В вашем коде есть два цикла for. Первый записывает значения в массив, а второй считывает их, чтобы получить их сумму. На самом деле вам не нужны оба этих цикла (или массив). Вы можете суммировать значения по мере их считывания, а затем вычислять среднее значение на основе суммы.

Однако обратите внимание, что если вы хотите расширить свой код позже, чтобы вычислить другую статистику по введенным данным (например, стандартное отклонение), будет проще работать с данными, хранящимися в массиве.

Простое решение, при котором пользователю не нужно сначала вводить количество чисел.

public static void main(String[] args) {
    System.out.println("------------------");
    System.out.println("Program for calculating sum and average of an arbitary series of numbers");
    System.out.println("------------------");

    Scanner input = new Scanner(System.in);
    ArrayList<Integer> values = new ArrayList<>();

    System.out.print("Input numbers. Input something else (e.g. enter) if you're finisehd:\n");
    while (true) {
        try {
            values.add(Integer.parseInt(input.nextLine()));
        } catch (Exception e) {
            break;
        }
    }
    System.out.println("Sum is : " + values.stream().mapToInt(Integer::intValue).sum());
    System.out.println("Average is: " + values.stream().mapToInt(Integer::intValue).average().getAsDouble());
}
  1. Вам не нужно сохранять эти числа в массиве.
  2. В этом случае использование BufferedReader дешевле, чем Scanner. Обратитесь к причины рассмотреть возможность использования BufferedReader.

    public static void main(String[] args) throws IOException {
            System.out.println("------\nProgram for calculating sum and average of integers\n------");
            System.out.print("Enter space separated integer values: ");
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String[] split = reader.readLine().split("\\s");//splits string on whitespaces
            double sum=0, average;
            for (String numberString : split)
                sum += Integer.parseInt(numberString);
            average = sum / split.length;
            System.out.println("Sum: " + sum);
            System.out.println("Average: " + average);
        }
    

Другие вопросы по теме