@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
右? 如何通过循环分配?
答案 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
是该类的实际类型,因为您从发布的代码段中省略了该类型。
希望有所帮助!