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
相关产品推荐
相关产品推荐

