You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:19:06