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

求整数数组的最大组合:Java代码输出错误的技术求助

解决整数数组最大组合排序问题

你的问题出在排序逻辑的比较规则错误:直接使用字符串的字典序降序排序,无法保证拼接后得到最大的数字组合。比如对于"7"和"75",字典序"75" > "7",但拼接后"775" > "757",所以应该把"7"放在"75"前面,这才是正确的顺序。

正确的比较规则

对于两个字符串a和b,我们需要比较a + b和b + a的字典序:

  • 如果a + b的字典序大于b + a,说明a应该排在b前面
  • 反之则b排在a前面

修正后的代码

你可以直接使用Java自带的Arrays.sort配合自定义Comparator,简洁高效:

import java.util.*;

public class classwork6 {
    public static void main(String[] args) {
        int[] list = {10, 68, 75, 7, 21, 12};
        String[] arr = new String[list.length];
        for (int i = 0; i < list.length; i++) {
            arr[i] = String.valueOf(list[i]);
        }
        
        // 自定义排序规则:按拼接后的字符串降序排列
        Arrays.sort(arr, (a, b) -> (b + a).compareTo(a + b));
        
        // 拼接结果并输出
        StringBuilder result = new StringBuilder();
        for (String s : arr) {
            result.append(s);
        }
        System.out.println(result.toString());
    }
}

代码说明

  1. 自定义Comparator中,(b + a).compareTo(a + b)的作用是:如果b+a比a+b大,就把b放在a前面,反之则a在前,确保拼接后的整体是最大数字。
  2. 用StringBuilder拼接结果比replaceAll更高效直观。

运行这段代码后,数组会被排序为["7", "75", "68", "21", "12", "10"],拼接后得到正确结果77568211210。

如果你想保留自己的冒泡排序方法,只需修改排序中的判断条件:

static void sort(String[] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            // 比较a+b和b+a的大小,把更大的组合放在前面
            if ((arr[i] + arr[j]).compareTo(arr[j] + arr[i]) < 0) {
                String temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

修改后原排序方法也能输出正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:42:07