java - 在Java中得到负数?

标签 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 循环给出了我期望的答案。

为什么求和结果是负数?某种整数溢出? 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/

相关文章:

java - 将新类添加到现有 JAR 文件(包含源代码)

java - 触摸监听器和改变 parent

java - 生成公钥/私钥之前的 RSA 加密强制关闭

java - 无法从sqlite数据库android中删除行

java - 为构造函数编写 JUnit 测试用例

java - 在 ServletContextListener 使用 web.xml 中的文件路径之前设置 JUnit 测试的系统属性

java - 使用 GNU Compiler for Java 而不是 Sun JDK 编译 Java 时的差异

java - 如何从批处理脚本检查 Java 安装?

java - 递归时无法更改变量

Java -> Scala,集合性能