Как отсортировать 2D-массив по столбцу (в порядке возрастания) в Java - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу отсортировать массив в соответствии со столбцами (в порядке возрастания). Метод 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 голосов
/ 19 апреля 2019

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

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

О товаре: https://beginnersbook.com/2013/12/java-string-compareto-method-example/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...