Co robie źle? [Klasa i Deklaracja tab]

0

Napisałem sobie klasę i chciałem zadeklarować sobie tablicę obiektów tej klasy jednak zmiana obiektu na np pozycji 6 pociąga za sobą zmianę wszystkich elementów tejże tablicy.
Oto kod klasy:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.yourorghere;

/**
 *
 * @author Ka
 */
public class Pkt3D {
     float x,y,z;
     float bold,r,b,g = 1;



    public Pkt3D(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
   public void madeSign(float bold, float r, float g, float b){
       this.bold = bold;
       this.r = r;
       this.g = g;
       this.b = b;
   }

public String getPos() {
    String info = "x:"+this.x+" y:"+this.y+" z:"+this.z;
    return info;
}
public void madePos(float x, float y, float z){
    this.x = x;
    this.y = y;
    this.z = z;
}
}

A tu kod programu:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication1;

/**
 *
 * @author Ka
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
Pkt3D pu = new Pkt3D((float) 0.5, 3, 2);
Pkt3D tab[] = new Pkt3D[16];
for(int i = 0;i<15;i++){
    tab[i]=pu;
    tab[i].x=i;
    tab[i].y=i;
    tab[i].z=i;
    for(int j =0;j<=i;j++)System.out.println(tab[i].getPos()+"/");
}
        // TODO code application logic here
    }

}

Krótko mówiąc, co robię źle ?

0

Zrobiles tablice, ktora trzyma 16 referencji do tego samego obiektu.

0

W takim razie jak zadeklarować tablice w taki sposób żeby zarezerwować pamięć dla każdego z 16 obiektów tablicy osobno ??

0

Twórz obiekty Pkt3D w pętli. Teraz poza pętlą tworzysz jeden obiekt klasy Pkt3D i podstawiasz go pod zmienną pu. Następnie, w pętli, przypisujesz ten obiekt do wszystkich elementów tablicy.

Zasada jest taka, że jeśli chcesz mieć np. 16 obiektów, to musisz wywołać operator new 16 razy. Oczywiście najlepiej zrobić to w pętli. Ty wywołujesz new tylko raz, więc tworzysz jeden obiekt.

edit: Jedna bardzo ważna kwestia. W metodzie main masz złe formatowanie kodu. Konkretnie masz bezsensowne wcięcie, tzn. w odwrotną stronę. Poczytaj trochę o formatowaniu kodu, choćby na wikipedii. Wybierz sobie jeden styl, a potem się go trzymaj. Takie niespójne coś jak Ty masz niby w tym momencie działa, ale powoduje bardzo poważne problemy w kodzie, które ujawniają się w przyszłości (gdy aplikacja jest bardziej złożona). Wszyscy porządni programiści co do jednego formatują porządnie swój kod.

0

Nie wiem czy zrozumiałem to dobrze (pewnie nie) ale mógłby ktoś podać przykład jak to ma wyglądać ?
EDIT
Dobra nie rozumiem, Chce tylko zadeklarować sobie 16 obiektów klasy Pkt3D w tablicy tak żeby nie było to 16 referencji do innego obiektu a 16 osobnych obiektów.

0
Pkt3D[] tab = new Pkt3D[16];
for(int i = 0;i<16;i++){
    tab[i]=new Pkt3D(i,i,i);
}
0

Dziękuję za pomoc Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1