【问题标题】:How to sort 2D array according to column wise(ascending order) in java如何在java中根据列(升序)对二维数组进行排序
【发布时间】:2019-09-09 12:15:04
【问题描述】:

我想按列(升序)对数组进行排序。方法 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

【问题讨论】:

  • 为什么数组排序不适合你? Arrays.sort(testdatset, new Comparator&lt;String[]&gt;() { @Override public int compare(String[] o1, String[] o2) { return o1[1].compareTo(o2[1]); } });

标签: java string sorting multidimensional-array


【解决方案1】:

似乎问题出在您对compareString(String str1,String str2) 方法的实现中。当您使用String.compareTo(String) 函数时,它通过将两个字符串转换为Unicode 值进行比较来比较它们。即使是 sortByRollNum() 函数也不能在所有情况下都起作用,只是幸运地起作用了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2018-08-17
    • 2022-01-10
    相关资源
    最近更新 更多