Как объединить 2 Point3f массива вместе? - PullRequest
1 голос
/ 31 марта 2012

Как я могу объединить 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 ]

2 голосов
/ 31 марта 2012

Массив пуст, пока вы не поместите в него объекты. В вашем коде предполагается, что вы можете назначить 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 голос
/ 31 марта 2012

Посмотрите, как ваш i меняется на каждой итерации цикла.

1 голос
/ 31 марта 2012

Это потому, что вы полюбили своих ++ операторов. Вместо 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]);
0 голосов
/ 31 марта 2012

Вы делаете это слишком сложным

  1. Создать новый массив (вы правильно вычисляете размер)
  2. Затем выполните цикл и добавьте все элементы из первого массива
  3. Затем еще один цикл для добавления элементов из второго массива (обязательно смещение для элементов, уже добавленных из array1)
...