如何将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;
}
感谢。
答案 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)
你这太复杂了