【问题标题】:Java: String objects matrixJava:字符串对象矩阵
【发布时间】:2016-08-30 07:37:22
【问题描述】:

我有一个名为“Worker”的对象矩阵,并且在每个“Worker”中都有一个名为“fullname”的字符串类型变量(名称没有空格,例如:SarahSmith)。 我需要按名称按字母顺序排列对矩阵的每一列进行排序。 现在我使用这种方法对每一列按字母顺序排序:

    public static void secondChange(Worker[][] mat) {
    for (int m = 0; m < mat[0].length; m++) {
        for (int i = 0; i < mat[0].length; i++) {
            int minindex = i;
            for (int j = i + 1; j < mat[0].length; j++) {
                if (mat[j][m].getName().compareTo(mat[minindex][m].getName()) < 0)
                    minindex = j;   
            }
            Worker temp = mat[i][m];
            mat[i][m] = mat[minindex][m];
            mat[minindex][m] = temp;
        }
    }
}

然后我用这种方法对每一列进行排序降序

    public static void rightOrder(Worker[][] mat){
    for (int m=0 ; m<mat[0].length ; m++)
    for (int i=0, j=(mat[0].length-1) ; i<(mat[0].length/2) || j>(mat[0].length/2) ; i++,j--){
        Worker temp = mat[i][m];
        mat[i][m] = mat[j][m];
        mat[j][m] = temp;
    }
}

在第二种方法之后,矩阵将恢复到原来的形式,而不是按照我想要的方式工作(第一种方法工作正常)。 任何人都可以帮忙吗? :)

【问题讨论】:

    标签: java string sorting matrix


    【解决方案1】:

    这并不能直接回答您的问题,但您可以通过为每列创建 List 包装器来使用 Java 的标准和更有效的矩阵排序:

    public static void sortColumnsDescending(Worker[][] matrix) {
        for (int i = 0; i < matrix[0].length; i++) {
            final int column = i;
            new AbstractList<Worker>() {
                @Override
                public int size() {
                    return matrix.length;
                }
    
                @Override
                public Worker get(int row) {
                    return matrix[row][column];
                }
    
                @Override
                public Worker set(int row, Worker element) {
                    Worker prev = matrix[row][column];
                    matrix[row][column] = element;
                    return prev;
                }
            }.sort(Comparator.comparing(Worker::getName).reversed());
        }
    }
    

    【讨论】:

    • 它是为类..所以我不能使用“列表包装”之类的东西,我需要使用字符串类和矩阵的基础知识。
    【解决方案2】:

    经过一段时间的调试,我得到了答案……

    在第二种方法中,我需要在mat.length -1 而不是mat[0].length-1 上运行~!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多