如何在Java中计算数组中所有数字的总和?

194

我在Java中遇到了一个问题,无法找到求一个数组中所有整数的和的有用方法,Math类中也没有这个方法。


18
编写自己的代码,它只需2-3行即可完成。 - wkl
2
不幸的是,上述(以及以下)的“答案”都是“Java方式” :-/ 您可以使用Functional Java库,但处理Java语法非常繁琐。 - user166390
2
我知道这个问题非常古老,但下面的msayag的答案似乎应该被标记为被接受的答案。 - Matsu Q.
编写自己的代码的问题在于它是一个循环。当你对3个数字求和时,应该能够在一条指令中完成。 - Al G Johnston
29个回答

5

看到以上回答都没有考虑使用线程池可以使程序运行速度快几倍,有点惊讶。在这里,parallel 使用了一个 fork-join 线程池,并自动将流分成多个部分并并行运行,然后合并结果。如果你记住以下代码,就可以在很多地方使用它。

因此,最快的简短代码奖得主是 -

int[] nums = {1,2,3};
int sum =  Arrays.stream(nums).parallel().reduce(0, (a,b)-> a+b);

假设你想进行平方和计算,那么可以使用以下代码:Arrays.stream(nums).parallel().map(x->x*x).reduce(0, (a,b)-> a+b)。这里的思路是你仍然可以执行 reduce 操作,而不需要 map。

2
不一定是最快的。对于小的N,循环比较高效。请查看我详细的长帖子。 - gerardw

4

在我看来,在Arrays类中扩展一个求和函数似乎很合适,其中已经存在fill、sort、search、copy和equals等方法。在将Fortran移植到java时,查询现有的辅助方法之前是否需要自己编写也是一个公平的问题,因为在javadocs中有许多方便的方法。在巨大的javadoc索引中搜索“sum”、“add”或者任何你能想到的关键词。你可能会怀疑是否已经有人为基本类型int、float、double、Integer、Float、Double编写了这样的方法?无论多么简单,检查一下总是好的。保持代码尽可能简单,不要重复造轮子。


3
我使用这个:
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;
}

2
C程序员,是吗? - towi

3

我个人喜欢这种方法。我的代码风格有点奇怪。

public static int sumOf(int... integers) {
    int total = 0;
    for (int i = 0; i < integers.length; total += integers[i++]);
    return total;
}

在代码中使用起来非常简单:

int[] numbers = { 1, 2, 3, 4, 5 };
sumOf(1);
sumOf(1, 2, 3);
sumOf(numbers);

2

从这个练习中学到了两件事:

你需要以某种方式迭代数组的元素 - 可以使用for循环或while循环来实现。 你需要在一个累加器中存储求和的结果。为此,你需要创建一个变量。

int accumulator = 0;
for(int i = 0; i < myArray.length; i++) {
    accumulator += myArray[i];
}

2
您可以像这样使您的代码看起来更好:
public void someMethod(){
    List<Integer> numbers = new ArrayList<Integer>();
    numbers.addAll(db.findNumbers());
    ...
    System.out.println("Result is " + sumOfNumbers(numbers));
}

private int sumOfNumbers(List<Integer> numbers){
    int sum = 0;
    for (Integer i : numbers){
      sum += i;
    }
    return sum;
}

2

你需要自己动手。
首先,你的总和是0。然后考虑数组中的每个整数,将其加入总和中。当你没有整数可加时,你就得到了这些整数的和。

如果没有整数,则总和为0。


1
使用以下逻辑:
static int sum()
     {
         int sum = 0; // initialize sum
         int i;

         // Iterate through all elements summing them up
         for (i = 0; i < arr.length; i++)
            sum +=  arr[i];

         return sum;
     }

1
underscore-java库中有一个sum()方法。
代码示例:
import com.github.underscore.U;

public class Main {
    public static void main(String[] args) {
        int sum = U.sum(java.util.Arrays.asList(1, 2, 3, 4));

        System.out.println(sum);
        // -> 10
    }
}

1
如果您特别拥有一个类型为double的数组,那么我有正确的解决方案来计算其元素的总和。此外,它使用了math类。
import org.apache.commons.math3.stat.StatUtils;
 
public class ArraySum {
 
   public static void main(String[] args) {
    double[] array = { 10, 4, 17, 33, -2, 14 };
    int sum = (int)StatUtils.sum(array);
    System.out.println("Sum of array elements is: " + sum);
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接