【发布时间】:2015-03-27 16:05:03
【问题描述】:
我在 Java 中定义了矩阵 (Integer[][]) 的 ArrayList。当我在ArrayList 中添加一个新矩阵时,它会将所有变量更改为最后一个矩阵。
我的意思是当我添加时
0 4 4 2
0 4 4 2
1 2 3 4
4 5 9 7
然后添加
1 4 7 8
0 1 2 3
4 5 6 7
4 1 2 3
当我打印这样的元素时:
1 4 7 8
0 1 2 3
4 5 6 7
4 1 2 3
-------
1 4 7 8
0 1 2 3
4 5 6 7
4 1 2 3
那么我该怎么做呢? 这是我的代码:
private Integer matrix[][] = new Integer[4][4];
public Integer[][] right(Integer[][] M) {
for (int k = 0; k < 4; k++)
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++) {
if (M[i][j] != 0 && M[i][j + 1] == 0) {
M[i][j + 1] += M[i][j];
M[i][j] = 0;
new_tile = true;
}
}
for (int i = 0; i < 4; i++)
for (int j = 3; j > 0; j--) {
if (M[i][j] == M[i][j - 1] && M[i][j] != 0 && M[i][j - 1] != 0) {
M[i][j] += M[i][j - 1];
M[i][j - 1] = 0;
new_tile = true;
}
}
for (int k = 0; k < 4; k++)
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++) {
if (M[i][j] != 0 && M[i][j + 1] == 0) {
M[i][j + 1] += M[i][j];
M[i][j] = 0;
new_tile = true;
}
}
return M;
}
static void printMatrix(Integer[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
System.out.print(matrix[i][j]);
}
System.out.println();
}
}
/**
* Print the elements in a matrix list
*/
static void printMatrices(ArrayList<Integer[][]> matrices) {
for (Integer[][] matrix : matrices) {
printMatrix(matrix);
System.out.println("--------");
}
}
public void solve() {
Integer[][] temp = right(matrix);
printMatrix(temp);
if (new_tile)
visited_nodes.add(temp);
else {
printMatrices(visited_nodes);
}
refresh();
}
@Override
public void actionPerformed(ActionEvent e) {
solve();
repaint();
}
以及每 100 毫秒调用一次的求解方法。
【问题讨论】:
-
你能显示更多代码吗?只是一个猜测,但我敢打赌,您不会添加新的数组/矩阵 - 而是添加 temp,更改其值,然后再次添加相同的实例
-
感谢您的关注。但是每次将 temp 添加到 arraylist 时,我都会更改 temp 的变量。
-
如何迭代 k?上面的双循环将打印矩阵,但您需要循环 k 的值以获取 ArrayList 中的每个矩阵。
-
就像我上面说的,你能展示更多的代码(最好是一个 MCVE)吗?从当前代码中可以看出如何添加数组/矩阵,以及如何完全打印出内容(您的代码如何在 k 上循环?)。
-
另外,显示实际输出,包括 k + "-----" 语句。