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

不使用内置sort()排序字符数组结果不符,求排查代码错误

问题分析与修正

你的代码核心问题在于第三个条件的逻辑错误,导致数字内部的排序出现混乱。

错误原因

原代码的第三个条件:

(lst5[i] < lst5[j] && (Character.isDigit(lst5[i])))

这个条件没有限制j的类型——当i和j都是数字时,如果lst5[i] < lst5[j],该条件也会触发交换,直接抵消了第一个条件(数字升序)的作用。比如处理数字1和3时,1 < 3满足第三个条件,交换后反而把大的数字放到了前面,最终导致数字部分出现132的错误顺序。

你真正需要的第三个逻辑是:当i是数字,j是字母时,交换两者位置,确保所有字母排在数字前面。

修正后的代码

把第三个条件修改为仅在i是数字且j是字母时触发交换:

String input5 = "A2B3C1";
char[] lst5 = input5.toCharArray();
  
for (int i = 0; i < lst5.length; i++) {
    for (int j = i + 1; j < lst5.length; j++) {
        if ((Character.isDigit(lst5[i]) && Character.isDigit(lst5[j]) && lst5[i] > lst5[j]) || 
                (!Character.isDigit(lst5[i]) && !Character.isDigit(lst5[j]) && lst5[i] > lst5[j]) || 
                (Character.isDigit(lst5[i]) && !Character.isDigit(lst5[j]))) { // 修正此处
            char tmp = lst5[i];
            lst5[i] = lst5[j];
            lst5[j] = tmp;
        }
    }
}
System.out.println(lst5); // 输出:ABC123

逻辑验证

修正后的三个条件分别对应:

  • 都是数字:若前一个数字更大,交换(实现数字升序)
  • 都是字母:若前一个字母更大,交换(实现字母升序)
  • 前一个是数字、后一个是字母:直接交换(确保字母全部排在数字前)

这样就能得到预期的ABC123输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:45:37