我创建了一个包含arraylist的类。值正在正确添加。当我尝试获取值时,它总是返回相同的值。
public class Data {
public ArrayList<Piece[][]> allMoves=new ArrayList<Piece[][]>();
public Data() {
}
}
要添加和访问其值的其他代码如下
public void save_this_move()
{
Piece temp[][]=new Piece[8][8];
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
temp[i][j]=board[i][j];
//System.out.print(temp[i][j].get_name()+" ");
}
//System.out.println();
}
allMoves.add(temp);
//System.out.println(".................");
}
和
public void undo()
{
for(int i=0;i<allMoves.size();i++)
{
Piece temp[][]=allMoves.get(i);
System.out.println(i+"th index");
for(int j=0;j<8;j++)
{
for(int k=0;k<8;k++)
{
System.out.print(temp[j][k].get_name()+" ");
}
System.out.println();
}
}
}
请帮我解决问题?
答案 0 :(得分:2)
问题是allMoves
的每个元素都存储对同一组64 Piece
个对象的引用
这使他们一下子改变。
而不是仅仅复制
中的引用 temp[i][j]=board[i][j];
你应该复制这个对象。
答案 1 :(得分:0)
使用此代码时,配对
allMoves.add(temp);
它实际上是参考temp。
所以你需要做一些像
这样的事情allMoves.add(new String[][]{....);
这个可能不起作用,但你明白了......
玩得开心!
好的家伙,add方法只接受最后一个对象的引用并复制它,但是,让我们给出单个数组字符串的例子。如果你试图添加
String [] thing = new String[3];
thing = {bla, blabla, blablabla}
allmoves.add(thing);
它将像{blablabla,blablabla,blablabla}
但是如果你使用
allmoves.add(New String{bla, blabla, blablabla});
它将是bla,blabla,blablabla
你明白了吗?
引用和事物。因为存在这种错误。这是唯一的方法...