java堆栈被覆盖了
我正在编写一个程序,它可以生成一个节点树,并在dfs上找到它(尚未完成),但当我试图将一个新节点推送到类中时,遇到了一个问题。新节点用我的方法覆盖旧节点。节点类这样声明
public class Node {
int[][] matrix;
Node pre;
boolean visited;
}
像这样的dfs类:(短缺,只有代码有bug)
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class DFS {
private static Stack<Node> stack;
public DFS()
{
stack = new Stack<Node>();
}
public static int dfs(int matrix[][])
{
Node first = new Node();
first.matrix= matrix;
first.visited=true;
first.pre= null;
stack.push(first);
pushleft(stack.peek());
pushleft(stack.peek());
return 0;
}
public static void pushleft(Node Nodeleft)
{
Node Newnode= new Node();
Newnode.matrix = left(Nodeleft.matrix);
stack.push(Newnode);
}
public static int[][] left (int matrix[][]) {
int matrix1[][]= new int[4][4];
for(int i=0; i<=3;i++)
for (int j=3;j>=0;j--)
{
if (matrix[i][j] !=0)
{
for (int k=j; k>=0; k--)
if (matrix[i][k]==0)
{
for (int l=k; l<=2;l++)
matrix1[i][l]=matrix[i][l+1];
matrix1[i][3]=0;
}
break;
}
}
for(int i=0; i<=3;i++)
for (int j=0;j<=2;j++)
{
if (matrix[i][j]==matrix[i][j+1])
{
matrix1[i][j]=matrix[i][j]*2;
for (int l=j+1; l<=2;l++)
matrix1[i][l]=matrix[i][l+1];
matrix1[i][3]=0;
}
}
return matrix1;
}
public static void main(String[] args)
{
stack = new Stack<Node>();
int a[][]=new int[4][4];
int goal;
Scanner in = new Scanner(System.in);
System.out.println("input 4x4");
for(int i=0; i<=3;i++)
for (int j=0;j<=3;j++)
{
a[i][j]=in.nextInt();
}
if (dfs(a)==0)
{
System.out.println("Win");
System.out.println("Cac trang thai:");
while (!stack.isEmpty())
{
for(int i=0; i<=3;i++)
{
for (int j=0;j<=3;j++)
{
System.out.print(stack.peek().matrix[i][j]+ " ");
}
System.out.println("");
}
System.out.println("");
stack.pop();
}
in.close();
}
}
}
当我尝试放入这个数组时
0 0 0 0
2 2 2 2
0 0 0 2
2 2 4 4
I want my output like this:<br/>
0 0 0 0
8 0 0 0
2 0 0 0
4 8 0 0
0 0 0 0
4 4 0 0
2 0 0 0
4 8 0 0
0 0 0 0
2 2 2 2
0 0 0 2
2 2 4 4
但它只打印了3次:
0 0 0 0
8 0 0 0
2 0 0 0
4 8 0 0
我猜我的方法pushleft遇到了静态或类似的问题,但仍然无法修复。有人能帮忙吗
# 1 楼答案
您需要在每次调用
pushleft
时创建新的Matrix
你会遇到问题,因为所有的
Matrix Arrays
都指向相同的object
。 因此,如果你在一个matrix
中改变任何东西,它也会在其他Node object
的所有matrix
中改变创建新的
Matrix
数组并从old matrix array
赋值作为