使用对象数组

时间:2012-12-18 21:35:23

标签: java arrays object

@edit IT工作,谢谢你的答案:)我想我的坏是我想的那个

WORLD[i]=global.Values.CHUNKPATTERN();

简单地取右边的对象,克隆它的值('s),并将它们分配到左边的部分,而事实证明它在两个之间建立了一个引用。再次感谢:)

我有简单的begginer / newbie数组问题:

for(int i=0; i<global.Values.WORLDVOLUME(); i++)  
// global.Values.WORLDVOLUME() --> const, int. always the same.
{
WORLD[i]=global.Values.CHUNKPATTERN(); //to pre-define as 'zero only' object. Always the same. Const.
WORLD[i].chunknr=i+1;
}

System.out.println(WORLD[4].chunknr);

我当然希望WORLD[0]有chunknr 1,WORLD[4]让chunknr为5,依此类推。

WORLD[i].chunknr=i+1;似乎更新了所有元素的chunknr(不仅仅是WORLD[i])。 所以它在这里看起来像WORLD[0].chunknr = WORLD[1].chunknr=global.Values.WORLDVOLUME()。 任何人都知道如何绕过它?我相信这是一个简单的解决方案...... 我能正确理解对象数组吗?

你可以喜欢(假设你有类和构造函数)

Point POINTARRAY[]= new Point[10];
POINTARRAY[1].x=5
POINTARRAY[1].y=6
POINTARRAY[3].x=17
POINTARRAY[3].y=1

右? 如何通过循环分配?

2 个答案:

答案 0 :(得分:0)

我打赌这个方法

WORLD[i]=global.Values.CHUNKPATTERN();

始终返回对象的同一实例,因此您可以在数组的每个插槽中引用相同的对象。

随后

WORLD[i].chunknr=i+1;

在每次迭代中更改同一对象的属性chunknr。你说

  

...似乎更新了所有元素的chunknr

有点真实,因为所有元素都引用同一个实例。

您需要找到让global.Values.CHUNKPATTERN();每次都返回一个新对象的方法。

答案 1 :(得分:0)

这一行是你的问题:

WORLD[i]=global.Values.CHUNKPATTERN();

这是将WORLD[i] 引用分配给global.Values.CHUNKPATTERN(),这意味着它们都指向同一个对象!对于循环的每次迭代,您只是创建了对相同全局对象的越来越多的引用。

有时这不是你想要的。在这种情况下,您需要复制该值,这可以通过多种方式完成,但在大多数情况下,您可以简单地克隆它。所有Java对象都支持clone()方法,但有时你需要覆盖它来为你的类做正确的事情。

所有这些意味着您应该用以下内容替换上述行:

WORLD[i]=(YourType)global.Values.CHUNKPATTERN().clone();

其中YourType是该类的实际类型,因为您从发布的代码段中省略了该类型。

希望有所帮助!