繁体   English   中英

在 Java 中获得负数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM