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 循环给出了我期望的答案。
为什么求和结果是负数?某种整数溢出? IntelliJ 返回的 minSum 为 -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
关于java - 在Java中得到负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59418544/