将矩阵的元素向下移动到java

时间:2017-12-03 07:50:01

标签: java matrix

我正在尝试给定一个矩阵,任何数字,如果它在其中找到零,则降低那些非空的元素。 例如矩阵

1  2  3  4  5
6  7  8  0  0
0 12  0 14  0
0  0 18 19  0
0 22 23 24 25

输出为

0  0  0  0  0
0  2  3  4  0
0  7  8 14  0
1 12 18 19  5
6 22 23 24 25

保留上面的零,按顺序向下移动元素。我有这段代码:

public static void displace(int[][] matrix, int size) {
    int cont=1;
    for (int col = 0; col < size; col++) {
        cont = 1;
        for (int row = 0; row < size; row++) {
            if (matrix[row][col] == 0) {
                matrix[row-1][col]=matrix[row][col];
                cont++;
            }
        }
    }
}

唯一能让我用零替换行的第一个数字,也就是说,它取零并且位置上升。

1 个答案:

答案 0 :(得分:1)

对于未来的问题,请考虑发布像Joe C评论的mcve。 删除任何不相关的内容(如int[] colorint position,如STaefi评论),并以易于使用的形式提供测试数据,如下所示:

public static void main(String[] args) {

    int[][] matrix1 =   {{1,2,  3 ,4 ,5},
                         {6,7,  8, 0, 0},
                         {0,12, 0,14, 0},
                         {0,0, 18,19, 0},
                         {0,22,23,24, 25}
    } ;

    displace(matrix1);
    for( int[] row : matrix1) {

        System.out.println(Arrays.toString(row));
    }
}

至于解决方案:您需要重复此过程,直到完成所有交换。

public static void displace(int[][] matrix) {

    int swapCount= 1;

    while (swapCount > 0) {

        swapCount = 0;
        for (int col = 0; col < matrix[0].length; col++) {
            for (int row = 0; row < matrix.length; row++) {
                if (matrix[row][col] == 0) {
                    if( ((row-1) >= 0) && (matrix[row-1][col] != 0)) {
                        //do swap
                        matrix[row][col] = matrix[row-1][col];
                        matrix[row-1][col]= 0;
                        swapCount++;
                    }
                }
            }
        }
    }
}