Например:
int[] numbers = {5, 8, 12, -18, -54, 84, -35, 17, 37};
Как найти среднее?
Какой алгоритм, или может есть специальные функции для этого?
Nofate♦
34.3k15 золотых знаков64 серебряных знака93 бронзовых знака
задан 17 июл 2015 в 16:55
АлександрАлександр
9736 золотых знаков13 серебряных знаков33 бронзовых знака
1
Ну например:
IntStream.of(numbers).average();
Это Java 8, stream API. Проверка: http://ideone.com/hSng8I
ответ дан 17 июл 2015 в 16:57
VladDVladD
206k27 золотых знаков289 серебряных знаков521 бронзовый знак
6
Сам алгоритм, который работает для всех версий Java:
// среднее арифметическое - сумма всех чисел деленная на их количество
int[] numbers = {5, 8, 12, -18, -54, 84, -35, 17, 37};
double average = 0;
if (numbers.length > 0)
{
double sum = 0;
for (int j = 0; j < numbers.length; j++) {
sum += numbers[j];
}
average = sum / numbers.length;
}
ответ дан 17 июл 2015 в 21:54
1
OptionalDouble average = Arrays.stream(numbers).average();
ответ дан 17 июл 2015 в 17:36
kandikandi
5,10910 золотых знаков47 серебряных знаков96 бронзовых знаков
class average {
public static void main(String args[]) {
int num [] = {5, 8, 12, -18, -54, 84, -35, 17, 37};
double sum = 0;
for (int x: num) {
sum += x;
}
System.out.print("среднее арифметическое чисел равно: " + sum/num.length);
}
}
ответ дан 22 авг 2018 в 14:10
1. Introduction
In this quick tutorial, we’ll cover how we can calculate sum & average in an array using both Java standard loops and the Stream API.
2. Find Sum of Array Elements
2.1. Sum Using a For Loop
In order to find the sum of all elements in an array, we can simply iterate the array and add each element to a sum accumulating variable.
This very simply starts with a sum of 0 and add each item in the array as we go:
public static int findSumWithoutUsingStream(int[] array) {
int sum = 0;
for (int value : array) {
sum += value;
}
return sum;
}
2.2. Sum With the Java Stream API
We can use the Stream API for achieving the same result:
public static int findSumUsingStream(int[] array) {
return Arrays.stream(array).sum();
}
It’s important to know that the sum() method only supports primitive type streams.
If we want to use a stream on a boxed Integer value, we must first convert the stream into IntStream using the mapToInt method.
After that, we can apply the sum() method to our newly converted IntStream:
public static int findSumUsingStream(Integer[] array) {
return Arrays.stream(array)
.mapToInt(Integer::intValue)
.sum();
}
You can read a lot more about the Stream API here.
3.1. Average Without the Stream API
Once we know how to calculate the sum of array elements, finding average is pretty easy – as Average = Sum of Elements / Number of Elements:
public static double findAverageWithoutUsingStream(int[] array) {
int sum = findSumWithoutUsingStream(array);
return (double) sum / array.length;
}
Notes:
- Dividing an int by another int returns an int result. To get an accurate average, we first cast sum to double.
- Java Array has a length field which stores the number of elements in the array.
3.2. Average Using the Java Stream API
public static double findAverageUsingStream(int[] array) {
return Arrays.stream(array).average().orElse(Double.NaN);
}
IntStream.average() returns an OptionalDouble which may not contain a value and which needs a special handling.
Read more about Optionals in this article and about the OptionalDouble class in the Java 8 Documentation.
4. Conclusion
In this article, we explored how to find sum/average of int array elements.
As always, the code is available over on Github.
Найти сумму и среднее в массиве Java
1. Вступление
В этом кратком руководстве мы расскажем, как вычислить сумму и среднее значение в массиве, используя как стандартные циклы Java, так и APIStream.
2. Найти сумму элементов массива
2.1. Суммирование с использованием цикла For
Чтобы найти сумму всех элементов в массиве,we can simply iterate the array and add each element to a sum accumulating __ variable.
Это очень просто начинается сsum, равного 0, и по ходу добавления каждого элемента в массиве:
public static int findSumWithoutUsingStream(int[] array) {
int sum = 0;
for (int value : array) {
sum += value;
}
return sum;
}
2.2. Суммирование с помощью Java Stream API
Мы можем использовать Stream API для достижения того же результата:
public static int findSumUsingStream(int[] array) {
return Arrays.stream(array).sum();
}
Если мы хотим использовать поток для упакованного значенияInteger, мы должны сначала преобразовать поток вIntStream с помощью методаmapToInt.
После этого мы можем применить методsum() к нашему недавно преобразованномуIntStream:
public static int findSumUsingStream(Integer[] array) {
return Arrays.stream(array)
.mapToInt(Integer::intValue)
.sum();
}
Вы можете узнать больше о Stream APIhere.
3. Найти среднее значение в массиве Java
3.1. Среднее без Stream API
Как только мы узнаем, как вычислить сумму элементов массива, найти среднее будет довольно просто – какAverage = Sum of Elements / Number of Elements:
public static double findAverageWithoutUsingStream(int[] array) {
int sum = findSumWithoutUsingStream(array);
return (double) sum / array.length;
}
Notes:
-
Разделивint на другойint, вы получите результатint. To get an accurate average, we first cast sum to double.
-
В JavaArray есть полеlength, в котором хранится количество элементов в массиве.
3.2. Среднее значение с использованием Java Stream API
public static double findAverageUsingStream(int[] array) {
return Arrays.stream(array).average().orElse(Double.NaN);
}
IntStream.average() возвращаетOptionalDouble, которое может не содержать значения и которое требует особой обработки.
4. Заключение
В этой статье мы изучили, как найти сумму / среднее значение элементов массиваint.
A quick and practical guide to find and to calculate the average of numbers in array using java language.
1. Overview
In this article, you’ll learn how to calculate the average of numbers using arrays.
You should know the basic concepts of a java programming language such as Arrays and forEach loops.
We’ll see the two programs on this. The first one is to iterate the arrays using for each loop and find the average.
In the second approach, you will read array values from the user.
Let us jump into the example programs.
2. Example 1 to calculate the average using arrays
First, create an array with values and run. the for loop to find the sum of all the elements of the array.
Finally, divide the sum with the length of the array to get the average of numbers.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Output:
3. Example 2 to find the average from user inputted numbers
Next, let us read the input array numbers from the user using the Scanner class.
Scanner Example to add two numbers
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Output:
1 2 3 4 5 6 7 8 9 |
|
4. Conclusion
In this article, you’ve seen how to calculate the average number in an array.
All examples shown are in GitHub.
Average
Venkatesh Nukala is a Software Engineer working for Online Payments Industry Leading company. In my free time, I would love to spend time with family and write articles on technical blogs. More on JavaProgramTo.com
Back to top button
В этом посте будет обсуждаться, как вычислить среднее арифметическое (среднее) всех элементов в списке в Java.
1. Использование Stream.average()
метод
Если вы используете JDK версии 1.8 или выше, вы можете использовать Stream для этой тривиальной задачи. Идея состоит в том, чтобы преобразовать список в соответствующий примитивный поток, т.е. IntStream
, DoubleStream
, или же LongStream
, и позвоните в average()
метод на нем. Он возвращает необязательный параметр, описывающий среднее значение элементов в потоке, или пустой необязательный параметр, если поток пуст. Вот полный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Arrays; import java.util.List; class Main { private static double getAverage(List<Integer> list) { return list.stream() .mapToInt(a -> a) .average().orElse(0); } public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); double avg = getAverage(list); System.out.println(avg); // 3.0 } } |
Скачать Выполнить код
2. Использование SummaryStatistics
Другой вероятный способ в Java 8 – получить SummaryStatistics
соответствующего примитивного потока, который предоставляет такие статистические данные, как количество, минимум, максимум, сумма и среднее значение для элементов потока.
Следующий пример демонстрирует его использование для получения среднего арифметического элементов потока:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; class Main { private static double getAverage(List<Integer> list) { IntSummaryStatistics stats = list.stream() .mapToInt(Integer::intValue) .summaryStatistics(); return stats.getAverage(); } public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); double avg = getAverage(list); System.out.println(avg); // 3.0 } } |
Скачать Выполнить код
Вот эквивалентный код без преобразования списка в примитивный поток.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.stream.Collectors; class Main { private static double getAverage(List<Integer> list) { IntSummaryStatistics stats = list.stream() .collect(Collectors.summarizingInt(Integer::intValue)); return stats.getAverage(); } public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); double avg = getAverage(list); System.out.println(avg); // 3.0 } } |
Скачать Выполнить код
3. Использование Guava
Если вы предпочитаете библиотеку Guava, вы можете использовать Stats класс, который представляет собой набор статистических сводных значений, таких как сумма, количество, среднее, минимальное и максимальное значение и т. д. Чтобы вычислить среднее арифметическое списка, вы можете использовать статический Stats.meanOf()
метод.
import com.google.common.math.Stats; import java.util.Arrays; import java.util.List; class Main { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); double avg = Stats.meanOf(list); System.out.println(avg); // 3.0 } } |
Скачать код
4. Использование цикла
Если вы используете более старые версии Java (Java 7 и более ранние версии) и не предпочитаете сторонние библиотеки, вы можете написать собственную процедуру для этой простой задачи, используя простой цикл for:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Arrays; import java.util.List; class Main { private static double getAverage(List<Integer> list) { long sum = 0; for (int i: list) { sum += i; } return list.size() > 0 ? (double) sum / list.size() : 0; } public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); double avg = getAverage(list); System.out.println(avg); // 3.0 } } |
Скачать Выполнить код
Это все о вычислении среднего значения всех элементов в списке в Java.