gpt4 book ai didi

java - 当我将数组中的数字相互相乘时,我得到一个负数。我该如何纠正这个问题?

转载 作者:行者123 更新时间:2023-11-29 06:36:28 25 4
gpt4 key购买 nike

public static void main(String[]args){
int A[]={2,4,6,9,5,4,5,7,12,15,21,32,45,5,6,7,12};
int multi= 1;
for (int i=0; i<A.length; i++) {
multi *= A[i];
}
System.out.println("The product of the numbers in the array is " + multi );
//I keep getting a negative value but when I shorten the array
//to a few numbers I don't have any problems.
}

最佳答案

这叫做溢出

An integer overflow occurs when an arithmetic operation attempts to create a numeric value that is too large to be represented within the available storage space. [Wikipedia - Integer Overflow]

int 最多可以表示 (2^32)-1。您的乘法给出的结果高于该值,因此会产生溢出。

multi 类型更改为 long 并且您不会遇到此问题(但仅适用于特定情况:如果您超过 可表示的最大值长,你会再次遇到那个问题)


如前所述,将类型更改为long 只会推迟 问题,您可以使用BigInteger 来解决它。 ,它可以处理任意精度的整数。

但是只有在确实需要时才使用它。如果您知道您的应用将在不超过 long 最大可表示值的情况下进行计算,则使用 long,因为 BigInteger 不是原始值并且会比 long 慢得多。

关于java - 当我将数组中的数字相互相乘时,我得到一个负数。我该如何纠正这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com