我正在尝试给定一个矩阵,任何数字,如果它在其中找到零,则降低那些非空的元素。 例如矩阵
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++;
}
}
}
}
唯一能让我用零替换行的第一个数字,也就是说,它取零并且位置上升。
答案 0 :(得分:1)
对于未来的问题,请考虑发布像Joe C评论的mcve。
删除任何不相关的内容(如int[] color
和int 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++;
}
}
}
}
}
}