我知道这个问题已经得到解答,但我的疑问有点不同...... 我在AI中实现了Wumpus World Problem,我想实现一个2D arraylist数组来存储Agent,Wumpus,微风,恶臭,坑和金的位置以及空白区域 值1,2,3,4,5,6,7代表它
class Wumpus{
public static void main(String[] args)
{
Sample s=new Sample();
s.a[0][2]= s.a[0][0]=s.a[0][1]=s.a[0][3]=new sample();
s.a[1][2]= s.a[1][0]=s.a[1][1]=s.a[1][3]=new sample();
s.a[2][2]= s.a[2][0]=s.a[2][1]=s.a[2][3]=new sample();
s.a[3][2]= s.a[3][0]=s.a[3][1]=s.a[3][3]=new sample();
s.a[0][0].add(4); s.a[0][1].add(7);
s.a[0][2].add(3);
s.a[0][3].add(5);
s.a[1][0].add(2); s.a[1][1].add(3); s.a[1][1].add(4); s.a[1][1].add(6);
s.a[1][2].add(5); s.a[1][3].add(3);
s.a[2][0].add(4); s.a[2][2].add(3);s.a[2][1].add(7);s.a[2][3].add(7);
s.a[3][0].add(1); s.a[3][1].add(3); s.a[3][2].add(5); s.a[3][3].add(3);
}
}
class Sample extends ArrayList<Integer>
{
Sample a[][]= new Sample[4][4];
}
但价值观正在变得混乱......例如,如果我打印 - &gt;
s.a[0][0].get(0)+" "+s.a[0][0].get(1)+" "+s.a[0][0].get(2)+" "+
s.a[0][0].get(3)+" "+s.a[0][0].get(1)
这里我获得了每次数据检索的价值,而我只在s.a [0] [0]中存储了值4;
所有细胞都发生了类似的情况
答案 0 :(得分:0)
在这里,您要将完全相同的对象分配给四个索引:
s.a[0][2]= s.a[0][0]=s.a[0][1]=s.a[0][3]=new sample();
由于对象(您的Sample
/ ArrayList
)不可变,因此对这些索引的调用将返回相同的索引。
当你写作时会发生什么:
s.a[0][0].add(4);
s.a[0][1].add(7);
s.a[0][2].add(3);
是您将Integer
个对象添加到相同 ArrayList
。
在接受的答案中阅读更多相关信息: