You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 13:27:01