[英]Getting a negative sum in Java?
public static void main(String[] args) {
int[] arr = {793810624, 895642170, 685903712, 623789054, 468592370};
miniMaxSum(arr);
}
static void miniMaxSum(int[] arr) {
Arrays.sort(arr);
long min = 0;
long max = 0;
long minSum = 0, maxSum = 0;
for (int j = 0; j < 4; j++) {
min += arr[j];
}
for (int j = 1; j < 5; j++) {
max += arr[j];
}
minSum = arr[0] + arr[1] + arr[2] + arr[3];
maxSum = arr[1] + arr[2] + arr[3] + arr[4];
System.out.print(minSum);
System.out.print(" ");
System.out.print(maxSum);
}
大家好,有个问题。 我有两种不同的方法来计算最小和最大总和。 但是,当运行此示例时,我得到 minSum/maxSum 的负值,而 for 循环给了我期望的答案。
为什么求和是负数? 某种整数溢出? 返回的 minSum IntelliJ 为 -1722871536,maxSum 为 -1295821736。
是的。 整数数学。 添加整数时,结果为整数。 即使溢出(如你猜),然后你把它扩大到long
。 在执行加法修复之前扩大一项。
minSum = arr[0] + arr[1] + arr[2] + (long) arr[3];
maxSum = arr[1] + arr[2] + arr[3] + (long) arr[4];
而且,为了验证,
System.out.print(minSum == min);
System.out.print(" ");
System.out.print(maxSum == max);
输出
true true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.