如何在Java中按列明智(升序)对二维数组排序

时间:2019-04-19 07:33:16

标签: java string sorting multidimensional-array

我想按列明智(升序)对数组进行排序.sortByrollNum方法可以正常工作,但是在第二种方法sortByPer中,最高编号打印在顶部,应该像第一种方法那样按升序打印。我尝试了很多。有人可以帮助我解决问题吗?

public static int compareStrings(String str1,String str2){
    int check=str1.compareTo(str2);
    return check;
}//RollNumCheck

public static void sortByRollNum(String [] [] arr,int currentSize){
    String minName=arr[0][0];
    String minRollNum=arr[0][1];
    String minPer=arr[0][2];
    for(int j=0;j<arr.length-1;j++){
        for(int i=0;i<arr.length-j-1;i++){
            int check=compareStrings(arr[i][1], arr[i+1][1]);
            if(check>0){
                minName=arr[i+1][0];
                minRollNum=arr[i+1][1];
                minPer=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]=minName;
                arr[i][1]=minRollNum;
                arr[i][2]=minPer;
            }//if
        }//for
    }//for
    System.out.print("\nSorted Array according to Roll Number.\n");
    printArray(arr);
}//sortByRollNum

public static void sortByPer(String [] [] arr,int currentSize){
    String minName=arr[0][0];
    String minRollNum=arr[0][1];
    String minPer=arr[0][2];
    for(int j=0;j<arr.length-1;j++){
        for(int i=0;i<arr.length-j-1;i++){
            int check=compareStrings(arr[i][2], arr[i+1][2]);
            if(check>0){
                minName=arr[i+1][0];
                minRollNum=arr[i+1][1];
                minPer=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]=minName;
                arr[i][1]=minRollNum;
                arr[i][2]=minPer;
            }//if
        }//for
    }//for
    System.out.print("\nSorted Array according to Percentage.\n");
    printArray(arr);
}//sortByPer

1 个答案:

答案 0 :(得分:0)

问题似乎出在compareString(String str1,String str2)方法的实现中。使用String.compareTo(String)函数时,它通过将两个字符串转换为Unicode值进行比较来比较两个字符串。甚至sortByRollNum()函数在所有情况下都无法正常工作,很幸运能做到这一点。

我的建议是,因为您要比较“掷骰数”和“百分比”,解析出整数值并进行比较。您可以使用Integer.parseInt(String)来执行此操作,但是字符串必须仅包含数字值。

关于compareTo:https://beginnersbook.com/2013/12/java-string-compareto-method-example/