再一次,我正在寻找一种绕过此阵列问题的方法,如何?除了clone()
以外,还有其他方法吗?
我问是因为与clone(),保护和实现方面的工作对我不起作用...
//assuming you have proper class and constructor (point(int x, int y))
/*
point 7POINTSARRAY[]=new point[7];
for(int i=0;i<7;i++)
{
7POINTSARRAY[i].x=i;
7POINTSARRAY[i].y=i;
}
//This won't work, so...
*/
point B = new point(0,0); // You need this.
for(int i=0;i<7;i++){
7POINTSARRAY[i]=B; // And this.
//But I want to read and assign value only,
// not establish a reference, so it can work How?
7POINTSARRAY[i].x=i;
7POINTSARRAY[i].y=i;
System.out.println(7POINTSARRAY[i].x);
}
System.out.println(7POINTSARRAY[1].x);
尽管所需的输出为A [1] .x = 1,但已经多次重写,现在A [1] .x = 7。
最佳答案
如果希望它们都引用不同的对象,则需要为数组的每个元素创建一个新的point
:
for(int i=0;i<7;i++)
{
point B = new point(0,0); // Put this *inside* the loop
7POINTSARRAY[i]=B; // Now B is a new instance of point
7POINTSARRAY[i].x=i;
7POINTSARRAY[i].y=i;
System.out.println(7POINTSARRAY[i].x);
}
System.out.println(7POINTSARRAY[1].x); // should now print 1
我没有更改您的代码格式,但是进行了改进,可以使上面的内容更加清晰易懂。