为什么ArrayList总是返回相同的值..?

时间:2014-01-12 15:57:54

标签: java eclipse class arraylist

我创建了一个包含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();
        }
    }


}

请帮我解决问题?

2 个答案:

答案 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

你明白了吗?

引用和事物。因为存在这种错误。这是唯一的方法...