Сортировка массива 2d String с использованием java

Я пытаюсь отсортировать строковый массив 2d, принятый в качестве пользовательского ввода. Но этот код работает для некоторых случаев и не работает для некоторых.

Код:

 public class Source {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        String[][] customerDetails= new String[5][3];
        customerDetails[0][0] = "10";
        customerDetails[0][1] = "Raj";
        customerDetails[0][2] = "Chennai";
  
        customerDetails[1][0] = "100";
        customerDetails[1][1] = "Akshay";
        customerDetails[1][0] = "Pune";

        customerDetails[2][0] = "20";
        customerDetails[2][1] = "Simrath";
        customerDetails[2][2] = "Amristar";

        customerDetails[3][0] = "30";
        customerDetails[3][1] = "Gaurav";
        customerDetails[3][2] = "Delhi";

        customerDetails[4][0] = "101";
        customerDetails[4][1] = "Ganesh";
        customerDetails[4][2] = "Chennai";

    
        
        /*for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //customerArray[i][j] = sc.nextLine();
            }
        }*/

        Arrays.sort(customerArray, (a, b)->a[0].compareTo(b[0]));
        
        for (int y = 0; y < 5; y++) {
            for (int z = 0; z < 3; z++) {
                System.out.println(customerArray[y][z]);
            }
        }
    }
}

Я дал прямой вход в этот код. Я хочу отсортировать числа как String

Может быть полезно включить ожидаемый результат. И обратите внимание: чтобы предоставить нам реальный минимальный воспроизводимый пример, было бы лучше «жестко закодировать» ваши входные данные в вашем коде здесь. Мы не знаем, какие данные вы считываете на своей машине со сканера ввода!

GhostCat 17.03.2022 13:45

Похоже, что первый вход является целым числом, но в вашей функции сравнения вы сравниваете их как строку. Можете ли вы подтвердить, что хотите отсортировать массив на основе сравнения целых чисел?

Anton Belev 17.03.2022 13:53

Я хочу отсортировать их как String

sns949 17.03.2022 14:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете неправильный ответ, потому что вы сравнивали 0-й индекс каждой строки 2D-массива, который является строкой. Таким образом, согласно логике сравнения строк, результаты верны. Чтобы получить порядок сортировки как целое число, вы должны преобразовать 0-й индекс каждой строки в целое число в вашем компараторе.

Измените вызов метода сортировки, как показано ниже, который должен работать в соответствии с вашими ожиданиями, потому что a[0] и b[0] перед сравнением преобразуются в целое число:

Arrays.sort(customerArray, (a, b)->Integer.valueOf(a[0]).compareTo(Integer.valueOf(b[0])));

Выход:

10
Akhil
Pune
20
Rajni
Hyderabad
30
Praveen
Delhi
100
Rohith
Chennai
101
Sam
Bangalore

Другие вопросы по теме