You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java程序计算五数取四之和的最大最小值为何输出错误?

问题分析与修正方案

首先得揪出你代码里几个关键的bug,这就是导致输出异常的核心原因:

  • 初始化与比较逻辑完全错误:你把maximum和minimum初始为0,而且比较时用了if(compare>sum)——这里的sum已经被重置为0了,等于每次拿当前计算的四数和跟0比,完全没起到更新最大最小值的作用。
  • 首次循环未正确赋值:第一次算出的四数和,应该直接赋值给maximum和minimum作为初始基准,不然初始的0会直接干扰结果判断。

先给你修正后的基础版本代码,解决上述问题:

import java.util.Scanner;

public class MiniMaxSum {
    static void miniMaxSum(int[] arr) {
        // 用long避免整数溢出,比如五个大数相加可能超出int范围
        long currentSum;
        long maximum = Long.MIN_VALUE;
        long minimum = Long.MAX_VALUE;

        // 遍历每个要排除的元素,计算剩余四个的和
        for (int i = 0; i < arr.length; i++) {
            currentSum = 0;
            for (int j = 0; j < arr.length; j++) {
                if (i != j) {
                    currentSum += arr[j];
                }
            }
            // 更新最大值与最小值
            if (currentSum > maximum) {
                maximum = currentSum;
            }
            if (currentSum < minimum) {
                minimum = currentSum;
            }
        }

        System.out.println(minimum + " " + maximum);
    }

    private static final Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        int[] arr = new int[5];
        for (int i = 0; i < 5; i++) {
            arr[i] = scan.nextInt();
        }
        miniMaxSum(arr);
    }
}

另外给你一个更高效的优化方案:其实不需要双重循环。五个数里选四个的和,本质就是总和减去其中一个数。要得到最大和,就去掉数组里最小的元素;要得到最小和,就去掉数组里最大的元素。这样只需要一次遍历就能搞定,时间复杂度从O(n²)降到O(n):

import java.util.Scanner;

public class MiniMaxSum {
    static void miniMaxSum(int[] arr) {
        long totalSum = 0;
        long min = Long.MAX_VALUE;
        long max = Long.MIN_VALUE;

        // 一次遍历同时计算总和、最大值、最小值
        for (int num : arr) {
            totalSum += num;
            if (num < min) {
                min = num;
            }
            if (num > max) {
                max = num;
            }
        }

        long minSum = totalSum - max;
        long maxSum = totalSum - min;

        System.out.println(minSum + " " + maxSum);
    }

    private static final Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        int[] arr = new int[5];
        for (int i = 0; i < 5; i++) {
            arr[i] = scan.nextInt();
        }
        miniMaxSum(arr);
    }
}

这个优化后的逻辑更清晰,也不容易出错,推荐使用这种写法~

内容的提问来源于stack exchange,提问作者mighty_leo88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:42