Я пытаюсь отсортировать строковый массив 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
Похоже, что первый вход является целым числом, но в вашей функции сравнения вы сравниваете их как строку. Можете ли вы подтвердить, что хотите отсортировать массив на основе сравнения целых чисел?
Я хочу отсортировать их как String




Вы получаете неправильный ответ, потому что вы сравнивали 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
Может быть полезно включить ожидаемый результат. И обратите внимание: чтобы предоставить нам реальный минимальный воспроизводимый пример, было бы лучше «жестко закодировать» ваши входные данные в вашем коде здесь. Мы не знаем, какие данные вы считываете на своей машине со сканера ввода!