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
相关产品推荐
相关产品推荐

