Лучший способ сделать программу, которая рассчитывает сумму и среднее значение в Java - PullRequest
0 голосов
/ 25 июня 2018

Я создал программу командной строки 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));
    }
}

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

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

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());
}
0 голосов
/ 26 июня 2018
  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);
        }
    
0 голосов
/ 25 июня 2018

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

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

...