再一次,我正在寻找一种绕过此阵列问题的方法,如何?除了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


我没有更改您的代码格式,但是进行了改进,可以使上面的内容更加清晰易懂。

10-06 13:52