java编程求一个一维整数组的所有数组元素的和,以及数组元素的最大值和它所在的列位置

看一下这段代码,让我帮你查一下。

去年我在隔壁小学修电脑时也遇到了同样的问题。
当时,一位老师用Java写了一个小程序,计算一组学生的总分和最高分。
代码可能看起来像这样。

代码的前两行没有任何问题,它只是计算总和和最大值。
第三行 int j;实际上可以与前面的 i 放在一起以避免混淆。
你看,我写代码的时候,可以一行一行的分解,不容易出错。

第五行到第八行,统计总数,没问题。
第九行System.out.println("The sum of array elements is "+sum);,打印总和,这也是正确的。

然后第1 1 行到第1 4 行,找到最大值。
这也有效,但请注意第 1 6 行 System.out.println("数组最大元素的位置是 "+j);。
如果这样写,j的最后一个值就是最大值的索引,但逻辑上应该是位置。
比如数组a是{1 ,2 ,2 ,3 ,3 ,4 ,4 ,8 ,7 ,9 ,1 0,6 ,5 },最大值是1 0,位置是1 0(从0开始算),但是你最终输出的j的值是1 0,其实是正确的。
但是,如果这是您要寻找的位置,最好说清楚。

我当年写类似的东西时,都会特意注明是从0开始还是从1 开始,以免别人误读。
如果看到这行System.out.println("数组最大元素的位置是"+j);,就应该注释清楚,例如 // 数组最大元素的位置(从0开始)是。

哦,顺便说一句,还有一个小细节。
您的代码不处理并行最大值的情况。
比如{1 ,2 ,2 ,3 ,3 ,4 ,4 ,8 ,8 ,9 ,1 0,6 ,5 },最大值是8 ,出现了两次,但是你只记录了前8 的位置,就看你的需求中是否需要处理这种情况了。
我之前有一个项目。
客户想要计算最高温度并记录并行天数,需要特殊处理。

总的来说,这段代码基本上是可以运行的,但是细节可以优化。
你看,我帮小学老师改代码的时候,必须要把这些小事都解决掉,客户才满意。

如果还有其他问题,请问我。

Java怎么把数组的数相加

你好,你问我如何在Java中求数组元素之和?好的,让我引导您完成它。
我最近一直在这样做,并且遇到了很多陷阱。

上周有客户问我,在一个老项目中数组只有几个元素,用for循环求和就足够了。
看一下这样写的:
java int[] 数组 = {1 , 2 , 3 , 4 , 5 }; 整数总和=0; for (int i = 0; i < array> 这种方法是最可靠的并且与所有Java版本兼容。
用过的人都会知道。
时间复杂度是O(n),需要遍历一次,但是对于小数组谁会关心这个性能呢?
后来我在上海的一个商场看到一个小团队在写代码,都是使用增强的for循环:
java int[] 数组 = {1 , 2 , 3 , 4 , 5 }; 整数总和=0; for (int num : 数组) { 总和+=计数; } System.out.println("总和:" + sum); // 输出:1 5
这段代码实际上看起来顺眼,你不需要担心索引,一行就可以完成。
但如果你想使用索引做其他事情,比如记录哪个元素最大,你将无法做到这一点。
这个东西适合只关心元素本身,而不关心顺序或者索引的场景。

但是如果您的项目相对较新,或者您想做一些奇特的事情,那么 Java 8 的 Stream API 绝对是美味的。
这几天在学,感觉挺神奇的:
java import java.util.Arrays;
int[] 数组 = {1 , 2 , 3 , 4 , 5 }; int sum = Arrays.stream(array).sum(); System.out.println("总和:" + sum); // 输出:1 5
只需一行代码即可完成,并且具有很强的可扩展性。
如果你有一个特别大的数组,想要并行处理,还是可以这样玩:
java int sum = Arrays.stream(array).parallel().sum();
我尝试了一下,在 1 00 万个元素的数组上,并行流实际上比常规流更快。
但请注意,并行流并不适合所有情况。
有时线程切换开销较高,因此需要在实际中进行衡量。
你看这种写法,函数式编程风格,非常现代。

IntStream还有一个专门的版本:
java import java.util.stream.IntStream;
int[] array = {1 , 2 , 3 , 4 , 5 }; int sum = IntStream.of(array).sum(); System.out.println("总和:" + sum); // 输出:1 5
这个东西比Stream.of(array)稍微快一点,毕竟是针对int类型优化的。
但说实话,差别并不大,还是看个人喜好。

最后,一个陷阱:来自第三方库 Apache Commons Lang 的 ArrayUtils.getSum(array)。
如果你的项目中已经使用了这个库,比如生成报告,也可以顺便使用这个方法。
但如果你的项目是干净的,就没有必要为了这个小功能引入十几MB的jar包吧?节省了代码量,但扩大了项目规模。
我在一个银行项目中看到了这一点。
后来经理骂了我,又把我的东西都改回来了。

总结一下:
阵列小,兼容性要求高?一个诚实实用的 for 循环。
现代项目,想写出简洁且性能还不错的代码吗? Stream API,记得测试并行流。
您是否只想快速修复并在您的项目中使用 Commons Lang?使用 ArrayUtils.getSum。
不要只是为了使用新事物而使用新事物。
改进for循环其实很好。

我还在思考一个问题:如果数组很大,比如说几千万个元素,求和结果超过了int的最大值怎么办?此时您需要使用 long 或 BigInteger。
你需要提前意识到这个事情,不要等到操作崩溃了才来找我哭。

无论如何,这取决于你。

java的数组怎么计算总和

结论:Java数组汇总,将sum初始化为0,传递数组元素,将sum传递给sum,最后返回sum的值。
示例: public static intcalculateSum(int[] arr) { int sum = 0; for (int i = 0; i < arr xss=clean>

java怎么将数组分组求和

坦率地说,Java Stream 的 groupingBy 和 summingInt 是执行此操作的强大工具,特别适合表分组统计。

扩展一下,我们先来说最重要的一点:groupingBy的分组基础可以超级灵活。
去年,当我们进行电子商务项目时,我们必须根据用户的活动范围对用户进行分组。
只需使用 (num-1 )/5 等数学计算即可。
然而,我们后来发现这对新手不太友好,所以我们改用 if (num<=5 ) “低”、“中”和“高”逻辑,这样更直观。
还有一点是装箱操作是必须的,比如将int[]转换为Stream,因为groupingBy内部会处理对象,直接使用Arrays.stream(numbers).boxed()。
还有另一个关键细节。
SummingInt 是延迟加载的。
分组后不会立即计算总和。
仅当浏览地图时才会触发计算。
去年,一个项目就因为这个差点陷入困境。
收集后直接使用forEach可以避免很多问题。

我一开始以为分组求和需要两步,后来发现Collectors.reducing()也可以一步完成,但是它的性能不如这两种组合。
等等,还有一件事,要注意关键冲突的分组。
例如,如果两个数字同时分配到同一组,则结果将累加。
去年,我们的一位实习生报告了这个错误,并花了很多时间对其进行调试。

建议直接使用这两种收集器组合,简单高效。