java - 奇怪的数组复制错误

标签 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(),但我仍然想弄清楚我的程序发生了什么。

最佳答案

首先不推荐使用clone()在 Java 中自 clone is broken .

其次,通过使用克隆 - 您正在克隆数组 - 而不是数组中的项目。有关更多信息,请阅读 deep vs. shallow copy .

关于java - 奇怪的数组复制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073497/

相关文章:

java - 有没有办法像我们在 laravel 中那样在 Android (java) 中使用 .env 变量?

java - 找不到模块 '<unknown>' 的 JDK 'appcompatV7'

arrays - Swift - 按另一个数组的属性对对象数组进行排序

javascript - 我想循环遍历数组并修改属性

python - 对 numpy 数组有多个相等条件

php - 使用 PHP 从远程服务器复制 JPG 文件的首选方法

c# - 正确复制其中包含(字节)数组的 C# 结构?

java - Java 的 Akka Actor ,maven 依赖问题

java - 如何使用java + maven创建机器人框架测试库

excel - 从excel中的字符串中提取文本