Я сделал программу командной строки 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));
}
}
Если этот код работает, он лучше подходит для Проверка кода.
@AndyTurner Итак, что мне использовать вместо массива, посоветуйте мне. И обязательно проверю код ревью. Спасибо.
Переменная типа int. sum += input.nextInt();.
В дополнение к предложению Энди ... Также вам понадобится counter для average
@Yahya У него уже есть переменная nums для этого.
@EmilePels Да, но ему не нужно дважды спрашивать пользователя, использует ли он переменную counter
@Yahya Он не спрашивает пользователя два раза, он спрашивает пользователя один раз, сколько цифр они хотят ввести. Использование другого имени для этой переменной nums ничего не изменит.
@ErwinBolwidt Я не видел, что ему нужен nums в for-loop, вот и все.




В вашем коде есть два цикла 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());
}
В этом случае использование 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);
}
Для начала не нужно складывать вещи в массив.