奇怪的数组复制错误

时间:2014-08-01 05:37:22

标签: java arrays copy java-3d

我正在编写一个绘制3D图形的Java3D程序。我将图形的点保存在一个数组中,并将其传递给createMesh()createGraph()函数。以下是我获取图表的要点:

    double x=xmin;
    Point3d[] vertices = new Point3d[graph.length*graph[0].length];
    for(int i=0, index=0; i<graph.length; i++, x+=((xmax-xmin)/graph.length))
    {
        double y = ymin;
        for(int j=0; j<graph[i].length; j++, y+=((ymax-ymin)/graph[i].length), index++)
        {
            double z = Math.sin(Math.pow(x, 2)+Math.pow(y, 2))/(Math.pow(x, 2)+Math.pow(y, 2));
            Point3d point = new Point3d(x, z, y);
            if(z>zmax)
                zmax = z;
            if(z<zmin)
                zmin = z;
            vertices[index] = new Point3d(x, z, y);
        }
    }

createGraph()方法中,我需要将点的y值设置为0.为了保持原始顶点数组不变,我将传递给createGraph()方法的数组复制如下:

private Shape3D createGraph(Point3d[] tempA)
{
    Point3d[] vertices = (Point3d[])tempA.clone();
    ...
}

createMesh()方法中,我不会更改顶点数组的值,因此我不会复制它。我的程序首先调用createGraph()并复制数组,然后调用createMesh()并读取原始数组。问题是,当我使用原始顶点数组中的点制作网格时,原始数组的y值在某种程度上也是0.我可以先调用createMesh(),但我仍然想弄清楚什么是继续我的计划。

2 个答案:

答案 0 :(得分:2)

首先,不建议在clone()之后在Java中使用clone is broken

其次,通过使用克隆 - 您将克隆数组 - 而不是数组中的项目。有关deep vs. shallow copy的详细信息,请参阅。

答案 1 :(得分:1)

如果Object不是基本类型,Java Object.clone()将传递对原始对象的引用。你需要深入复制。

以下文章将为您提供帮助。

A guide to object cloning in java

how-do-you-make-a-deep-copy-of-an-object-in-java

相关问题