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

Java数组元素求和结果异常,请求错误原因排查

问题分析与解决方案

你的代码得到错误结果的核心原因是整数溢出,具体细节如下:

  • Java 中的int是32位有符号整数,取值范围为 -2147483648 到 2147483647(约±21亿)。
  • 你输入的五个元素总和为 1000000001 + 1000000002 + 1000000003 + 1000000004 + 1000000005 = 5000000015,这个数值远远超出了int的最大值。
  • 当int类型变量累加超过最大值时,会发生溢出回绕:数值会从最大值开始向最小值方向循环,最终得到被截断的错误结果705032719(这个值是5000000015 - 2*2^31计算而来,刚好是溢出后的剩余值)。

另外,虽然单个元素1000000001还在int范围内,但如果后续输入更大的元素(比如超过21亿的数),数组存储时也会溢出,所以建议统一使用更大范围的数值类型。

修复方案

只需要把涉及数值存储和计算的类型从int改为long即可——long是64位有符号整数,取值范围能覆盖±9万亿,完全满足你的需求。

修改后的代码如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class TestClass {
    public static void main(String args[] ) throws Exception {
        // 将求和变量改为long类型
        long sumofArray = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter Size of Array :- ");
        int totalNumbers = Integer.parseInt(br.readLine());
        System.out.println("totalNumbers=> " + totalNumbers);
        // 将数组类型改为long[]
        long []arrayEle = new long[totalNumbers];
        System.out.println("Enter Array element :- ");
        String arrEle = br.readLine();
        System.out.println("Array Elements Are:-"+arrEle);
        String []myArray = arrEle.split(" ",totalNumbers+1);
        for(int i = 0; i < totalNumbers; i++) {
            // 用Long.parseLong解析元素
            arrayEle[i] = Long.parseLong(myArray[i]);
            System.out.println(arrayEle[i]);
        }
        for(int i = 0; i < totalNumbers; i++)
            sumofArray += arrayEle[i];
        System.out.println("Sum of Array Elements is:- "+sumofArray);
    }
}

运行验证

输入你提供的测试用例后,修改后的代码会输出正确结果:Sum of Array Elements is:- 5000000015。

内容的提问来源于stack exchange,提问作者EdGeCuTter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:27:47