Как вы находите сумму всех чисел в массиве в Java? - PullRequest
115 голосов
/ 29 декабря 2010

У меня проблема с поиском суммы всех целых чисел в массиве в Java.Я не могу найти какой-либо полезный метод в классе Math для этого.

Ответы [ 24 ]

235 голосов
/ 25 июля 2013

В вы можете использовать потоки:

int[] a = {10,20,30,40,50};
int sum = IntStream.of(a).sum();
System.out.println("The sum is " + sum);

Выход:

Сумма 150.

В упаковке java.util.stream

import java.util.stream.*;
34 голосов
/ 31 декабря 2013

Если вы используете Java 8, класс Arrays предоставляет метод stream(int[] array), который возвращает последовательный IntStream с указанным int массив. Он также был перегружен для массивов double и long.

int [] arr = {1,2,3,4};
int sum = Arrays.stream(arr).sum(); //prints 10

Он также предоставляет метод stream(int[] array, int startInclusive, int endExclusive), который позволяет вам взять указанный диапазон массива (который может быть полезен):

int sum = Arrays.stream(new int []{1,2,3,4}, 0, 2).sum(); //prints 3

Наконец, он может принимать массив типа T. Так, например, вы можете иметь String, который содержит числа в качестве входных данных, и если вы хотите их суммировать, просто сделайте:

int sum = Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();
31 голосов
/ 29 декабря 2010

Это одна из тех простых вещей, которых нет (AFAIK) в стандартном Java API. Достаточно легко написать свой собственный.

Другие ответы совершенно хороши, но вот один с некоторыми синтаксическими сахарами для каждого.

int someArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;

for (int i : someArray)
    sum += i;

Кроме того, примером суммирования массива является даже , показанный в спецификации языка Java 7 . Пример взят из Раздел 10.4 - Доступ к массиву .

class Gauss {
    public static void main(String[] args) {
        int[] ia = new int[101];
        for (int i = 0; i < ia.length; i++) ia[i] = i;
        int sum = 0;
        for (int e : ia) sum += e;
        System.out.println(sum);
    }
}
18 голосов
/ 29 декабря 2010

Вы не можете.В других языках есть некоторые методы для этого, такие как array_sum () в PHP, но в Java нет.

Просто ..

int[] numbers = {1,2,3,4};
int sum = 0;
for( int i : numbers) {
    sum += i;
}

System.out.println(sum);
15 голосов
/ 19 сентября 2013

В Apache Math: есть StatUtils.sum(double[] arr)

13 голосов
/ 29 декабря 2010

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

6 голосов
/ 29 декабря 2010
int sum = 0;

for (int i = 0; i < yourArray.length; i++)
{
  sum = sum + yourArray[i];
}
6 голосов
/ 15 сентября 2014

In Java 8

Код :

   int[] array = new int[]{1,2,3,4,5};
   int sum = IntStream.of(array).reduce( 0,(a, b) -> a + b);
   System.out.println("The summation of array is " + sum);

  System.out.println("Another way to find summation :" + IntStream.of(array).sum());

Выход :

The summation of array is 15
Another way to find summation :15

Пояснение :

В Java 8 вы можете использовать концепцию сокращения, чтобы сделать добавление.

Узнайте все о сокращении

4 голосов
/ 16 января 2013

ИМХО, кажется, что функция суммирования подходит для расширения класса Arrays, в котором в реальном времени выполняются заливка, сортировка, поиск, копирование и равенство.Есть много удобных методов, скрывающихся в javadocs, так что это справедливый вопрос при портировании Fortran на java, чтобы спросить, прежде чем использовать наш собственный вспомогательный метод.Ищите в огромном индексе javadoc слова "sum", "add" и любые другие ключевые слова, о которых вы только можете подумать.Вы можете подозревать, что кто-то уже сделал это для примитивных типов int, float, double, Integer, Float, Double?Независимо от того, насколько просто, это всегда хорошо проверить.Сохраняйте код как можно более простым и не изобретайте колесо.

3 голосов
/ 27 февраля 2014

Я использую это:

public static long sum(int[] i_arr)
{
    long sum;
    int i;
    for(sum= 0, i= i_arr.length - 1; 0 <= i; sum+= i_arr[i--]);
    return sum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...