如何实现Java二维数组按列排序及通过用户输入填充数据
Java二维数组排序与用户输入填充实现方案
完整可运行代码
import java.util.Arrays; import java.util.Scanner; public class JavaApplication45 { // 按指定列排序二维数组的方法 public static void sort2DArrayByColumn(String[][] array, int columnIndex) { Arrays.sort(array, (row1, row2) -> { String val1 = row1[columnIndex].trim(); String val2 = row2[columnIndex].trim(); // 尝试按数值比较,适配经纬度类数字列 try { double num1 = Double.parseDouble(val1); double num2 = Double.parseDouble(val2); return Double.compare(num1, num2); } catch (NumberFormatException e) { // 非数值内容按字符串字典序比较,适配城市、地区类文本列 return val1.compareTo(val2); } }); } // 格式化打印二维数组的方法 public static void print2DArray(String[][] array, int columns) { for (String[] row : array) { for (int i = 0; i < columns; i++) { System.out.print(row[i].trim() + "\t"); } System.out.println(); } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); final int ROWS = 8; final int COLUMNS = 4; String[][] AN = new String[ROWS][COLUMNS]; // 选择数据源 System.out.println("请选择数据源:1-使用内置测试数据 2-手动输入数据"); int choice = scanner.nextInt(); scanner.nextLine(); // 吞掉输入后的换行符避免后续录入异常 if (choice == 1) { // 内置默认测试数据 AN[0][0] = "Curepipe"; AN[0][1] = "-20.3162"; AN[0][2] = "57.5166"; AN[0][3] = "Plaine Wilhems"; AN[1][0] = "Ebene"; AN[1][1] = "-20.2456"; AN[1][2] = "57.4842 "; AN[1][3] = "Plaine Wilhems "; AN[2][0] = "Rose Hill"; AN[2][1] = "-20.2456"; AN[2][2] = "57.4719"; AN[2][3] = "Plaine Wilhems"; AN[3][0] = "Beau Bassin"; AN[3][1] = "-20.2276"; AN[3][2] = "57.4681"; AN[3][3] = "Plaine Wilhems"; AN[4][0] = "Quatre Bornes"; AN[4][1] = "-20.2654"; AN[4][2] = "57.4778 "; AN[4][3] = "Plaine Wilhems"; AN[5][0] = "Vacoas"; AN[5][1] = "-20.2981"; AN[5][2] = "57.4783"; AN[5][3] = "Plaine Wilhems"; AN[6][0] = "Mahebourg"; AN[6][1] = "20.4081"; AN[6][2] = "57.7000 "; AN[6][3] = "Grand Port "; AN[7][0] = "Goodlands"; AN[7][1] = "-20.0350"; AN[7][2] = "57.6431"; AN[7][3] = "Rivere du Rempart"; } else if (choice == 2) { // 手动录入数据逻辑 for (int i = 0; i < ROWS; i++) { System.out.println("请输入第" + (i+1) + "行的4个内容(城市名、纬度、经度、所属地区,每输入一个按回车确认):"); for (int j = 0; j < COLUMNS; j++) { AN[i][j] = scanner.nextLine(); } } } // 打印排序前内容 System.out.println("\n===== 排序前内容 ====="); print2DArray(AN, COLUMNS); // 选择排序列 System.out.println("\n请输入要排序的列索引(0=城市名 1=纬度 2=经度 3=所属地区):"); int sortColumn = scanner.nextInt(); if (sortColumn >= 0 && sortColumn < COLUMNS) { sort2DArrayByColumn(AN, sortColumn); // 打印排序后内容 System.out.println("\n===== 按列" + sortColumn + "排序后内容 ====="); print2DArray(AN, COLUMNS); } else { System.out.println("列索引输入错误,程序退出"); } scanner.close(); } }
使用说明
- 运行程序后按照提示选择数据源,输入
1直接使用内置的城市测试数据,输入2可以逐行手动录入8组数据 - 排序前会先打印原始数组内容,输入对应列索引即可完成排序,数字列会按数值大小排序,文本列会按字典序排序
内容的提问来源于stack exchange,提问作者user16457899
相关产品推荐
相关产品推荐

