JAVA - For循环不创建新数组

时间:2012-03-15 15:10:38

标签: java arrays for-loop clone

有人可以帮助我使用以下代码。当for循环再次执行时,我的临时数组Point2D永远不会覆盖前一个数组。

我使用for循环来打印数据,以便测试临时数组是否确实发生变化......而且肯定不会......为什么这样的事情会发生?

Point2D在不同的类中定义。它的x,y和z值是公开的。

我认为它可能是.clone()函数?

谢谢!


Point2D[] pointArr;
pointArr = populateArr(N);  

    for (int i = 0; i < N; i++)
    {
        Point2D[] temp = pointArr.clone();

        if (i >= 0) 
        { 
            Point2D exch = temp[i]; 
            temp[i] = temp[0]; 
            temp[0] = exch;
        //temp[0].z = 0.0;
        }

        System.out.println();

        temp = determine_slopes(temp, N);

        Arrays.sort(temp, temp[0].X_ORDER);

    }

编辑1:只是为了澄清......我实际上希望Point2D [] temp随着每次迭代而改变......但由于某种原因它不会改变。可能是什么问题?

编辑2:我对pointArr的输出如下:

10000 0 0.0 0 10000 0.0 3000 7000 0.0 7000 3000 0.0 20000 21000 0.0 3000 4000 0.0 14000 15000 0.0 6000 7000 0.0

当我打印时,我在第一次迭代后打印温度,我的输出看起来不像pointArr ......它完全不同。

3 个答案:

答案 0 :(得分:4)

数组声明应该移出循环之外。否则,您将在循环的每次迭代中创建数组的新实例,覆盖前一个:

Point2D[] pointArr;
pointArr = populateArr(N);
Point2D[] temp = pointArr.clone();  //move to here

    for (int i = 0; i < N; i++)
    {


        if (i >= 0) 
        { 
            Point2D exch = temp[i]; 
            temp[i] = temp[0]; 
            temp[0] = exch;
        //temp[0].z = 0.0;
        }

        System.out.println();

        temp = determine_slopes(temp, N);

        Arrays.sort(temp, temp[0].X_ORDER);

    }

编辑: 我不确定这会有所帮助,但尝试使用循环而不是克隆来创建pointArr的副本:

Point2D[] pointArr;
pointArr = populateArr(N);
Point2D[] temp;

for(int i=0; i<pointArr.length; i++)
    pointArr[i]=temp[i];

如果您,正如您所说,由于某种原因想要覆盖temp,请在循环中移动循环等(复制数组)

答案 1 :(得分:2)

这一行应该在for循环之外

Point2D[] temp = pointArr.clone();

答案 2 :(得分:1)

我认为您的问题是,每次循环时,您都会将临时数组重新设置为pointArr克隆。这就是为什么当你交换这些值时,每次你在临时数组中更改它时都会丢失它,但每次都将temp数组设置为克隆。尝试从for循环中声明你的临时数组。