如何将2个Point3f阵列连接在一起?

时间:2012-03-31 15:49:47

标签: java graphics java-3d

如何将2个Point3f阵列连接在一起?

我试过这个,但它返回空指针异常:(

private Point3f[] combineRings(Point3f[] a, Point3f[] b){
    int size = a.length+b.length;
    System.out.println("Size = "+size);
    Point3f[] c = new Point3f[size];
    for(int i = 0, j = 0; i < size; i+=2, j++){

        c[i].x = a[j].getX();
        c[i].y = a[j].getY();
        c[i].z = a[j].getZ();

        c[i+1].x = b[j].getX();
        c[i+1].y = b[j].getY();
        c[i+1].z = b[j].getZ();

        // Debugging
        System.out.println(i+"\t"+j+"\t"+c[i]+"\t"+a[j]+"\t"+c[i++]+"\t"+b[j]);
    }
    return c;
}

感谢。

4 个答案:

答案 0 :(得分:2)

在将对象放入其中之前,数组为空。您的代码假定您可以立即分配给c[i].x,但由于c[i]中没有对象,因此您获得NullPointerException

我不知道您是否要将数组中的对象复制到新对象中,或者只是想复制引用,以便两个数组都指向相同的对象。第二个很简单:

System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);

如果是第一个,使用Point3f复制构造函数会更简单:

for (int i=0; i<a.length; ++i)
    c[i] = new Point3f(a[i]);

for (int i=0; i<b.length; ++i)
    c[i+a.length] = new Point3f(b[i]);

答案 1 :(得分:1)

这是因为您对++运营商很满意。您应该使用c[i++]而不是c[i+1]

表达式var++1添加到var,并将其留在那里。您的c[i++]访问不同的数组元素,然后您在循环标题中得到i += 2,以使您的索引更远离它应该的位置。

c[i+1].x = b[j].getX();
c[i+1].y = b[j].getY();
c[i+1].z = b[j].getZ();

// Debugging
System.out.println(i+"\t"+j+"\t"+c[i]+"\t"+a[j]+"\t"+c[i+1]+"\t"+b[j]);

答案 2 :(得分:1)

看看你的i如何在循环的每次迭代中发生变化。

答案 3 :(得分:0)

你这太复杂了

  1. 创建新阵列(您正在计算尺寸)
  2. 然后执行循环并添加第一个数组中的所有元素
  3. 然后另一个循环来添加第二个数组中的元素(确保已经从array1添加的元素偏移)