Как отсортировать 2D-массив по столбцам (в порядке возрастания) в java

#java #string #sorting #multidimensional-array

#java #строка #сортировка #многомерный массив

Вопрос:

Я хочу отсортировать массив по столбцам (в порядке возрастания).Метод 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. Почему сортировка массива вам не подходит? Arrays.sort(testdatset, new Comparator<String[]>() { @Override public int compare(String[] o1, String[] o2) { return o1[1].compareTo(o2[1]); } });

Ответ №1:

Похоже, проблема кроется в вашей реализации compareString(String str1,String str2) метода. Когда вы используете String.compareTo(String) функцию, она сравнивает две строки, преобразуя их в значения Юникода для сравнения. Даже sortByRollNum() функция не работала бы во всех случаях, просто повезло, что она работала.

Мое предложение было бы таково: поскольку вы сравниваете числа бросков и проценты, выделите целочисленные значения и сравните их. Вы можете использовать Integer.parseInt(String) для этого, но строка должна содержать только числовые значения.

О компании compareTo: https://beginnersbook.com/2013/12/java-string-compareto-method-example /