2D arraylist数组混淆

时间:2017-08-24 14:07:21

标签: java arrays

我知道这个问题已经得到解答,但我的疑问有点不同...... 我在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;

所有细胞都发生了类似的情况

1 个答案:

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

在接受的答案中阅读更多相关信息:

Initializing multiple variables to the same value in Java