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

Java二维数组按列升序排序:sortByPer方法排序异常求助

搞定你的百分比排序问题!

嘿,我一眼就看出问题所在了——你的sortByPer方法用字符串字典序来比较百分比,这和数值大小的逻辑完全不一样啊!

举个直观的例子:字符串"100"和"90"用compareTo比较时,会返回负数(因为字符'1'的ASCII码比'9'小),程序会误以为"100"比"90"小,结果排序出来就完全乱了,看起来像是把最大的数值顶在了最前面,根本不是你要的升序。

修复方案:用数值比较替代字符串比较

咱们把百分比字符串转成double类型,用数值大小来判断,这样就能实现正确的升序排序了。

完整修复后的sortByPer方法

public static void sortByPer(String [] [] arr,int currentSize){ 
    for(int j=0;j<arr.length-1;j++){ 
        for(int i=0;i<arr.length-j-1;i++){ 
            // 把百分比字符串转为数值类型,用实际大小比较
            double currentPer = Double.parseDouble(arr[i][2]);
            double nextPer = Double.parseDouble(arr[i+1][2]);
            
            // 升序逻辑:如果当前元素的百分比大于下一个,就交换位置
            if(currentPer > nextPer){ 
                // 交换代码和之前逻辑一致,变量名换得更直观了些
                String tempName = arr[i+1][0];
                String tempRollNum = arr[i+1][1];
                String tempPer = arr[i+1][2];
                
                arr[i+1][0] = arr[i][0];
                arr[i+1][1] = arr[i][1];
                arr[i+1][2] = arr[i][2];
                
                arr[i][0] = tempName;
                arr[i][1] = tempRollNum;
                arr[i][2] = tempPer;
            }
        }
    }
    System.out.print("\nSorted Array according to Percentage.\n"); 
    printArray(arr); 
}

为啥学号排序能正常工作?

因为学号一般是固定长度的数字字符串(比如都是6位数字),这时候字符串的字典序和数值顺序是完全一致的,所以compareStrings方法能正常生效。但百分比可能有不同位数(比如89、95.5、100),字符串比较的逻辑就彻底不适用了。

小提醒

如果你的百分比字符串带百分号(比如"95.5%"),记得先去掉符号再转数值:

double currentPer = Double.parseDouble(arr[i][2].replace("%", ""));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:53