Java动态创建5元素数组并求和:for-each循环求和结果为0的问题咨询
Java动态创建5元素数组并求和:for-each循环求和结果为0的问题咨询
嘿,我来帮你拆解下这个问题~你提到用普通for循环执行相同逻辑能得到正确结果,但用for-each循环输入数组元素后,最后求和总是输出0,这确实是Java里for-each循环的一个常见坑点。
问题根源
在Java的for-each循环中,迭代变量(也就是你代码里的element)是原数组元素的副本,不是直接指向原数组的引用。当你执行element = sc.nextFloat();时,只是把输入的值赋给了这个临时的副本变量,完全没有修改原数组里的元素——原数组的元素还是默认的初始值0.0,所以最后求和自然会得到0。
而普通for循环是通过索引(比如a[i])直接访问原数组的元素,赋值操作会直接修改原数组里的值,所以能正确存储你输入的元素,求和也就正常了。
修正后的代码
我还顺便帮你调整了代码里的两个小问题:一是数组大小应该用int类型(Java数组长度必须是整数),二是原来固定创建5个元素的数组,不符合你“动态创建”的需求,现在改成根据用户输入的大小创建数组:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter the size of array"); // 数组大小改为int类型,符合Java数组长度要求 int n = sc.nextInt(); float sum = 0; // 根据输入的大小动态创建数组 float[] a = new float[n]; System.out.println("Enter the elements of array"); // 用普通for循环通过索引赋值,直接修改原数组元素 for (int i = 0; i < a.length; i++) { a[i] = sc.nextFloat(); } System.out.println("The sum of the items in array are:"); // 求和环节可以正常用for-each,因为只是读取元素 for (float element : a) { sum += element; } System.out.println(sum); } }
额外说明
如果实在想用类似for-each的方式遍历数组并修改元素,Java里没有直接的办法,必须通过索引访问——这也是for-each循环的设计初衷:它更适合只读遍历,不适合修改原数组的场景。
备注:内容来源于stack exchange,提问作者Maliha
相关产品推荐
相关产品推荐

