[Tablica] Problem z tablicą

0

Witam mam problem z lista, lub może odpowiednim odwołaniem się do obiektów, mianowicie posiadam klasę:

 
public class Klasa {
    public String op1;


public String getop1(){
                 return op1;
           }

Oraz zadeklarowana listę typu klasa

 ArrayList<Klasa> a = new ArrayList<Klasa>();
    Klasa dym_klasa = new Klasa();

Oraz dodawanie elementów:

dym_klasa.op1="raz";
  a.add(dym_klasa);
dym_klasa.op1="dwa";
  a.add(dym_klasa);

I wyswietlanie:

  a.get(0);
  System.out.print(dym_klasa.getop1());

A problem polega na tym ze w wyświetlaniu danych, zawsze jest wyświetlany/wpisywany do tablicy ostatni element. Moim zdaniem źle są wpisywane obiekty, ale mogę tez się mylić, po prostu chciałbym uzyskać jakaś pomoc, albo chociaż żeby ktoś nakierował mnie w czym jest problem

0

Mylisz sie. ArrayList przechowuje tylko REFERENCJE do obiektow a NIE ICH KOPIE. Gdy zmodyfikujesz obiekt, to ta zmiana bedzie widoczna za posrednictwem wszystkich referencji wskazujacych na ten obiekt.

Btw - nie uzywaj pol publicznych. Uzywaj pol prywatnych i publicznej metody setter'a albo ustawiaj wartosc op1 (co to za nazwa ?) w konstruktorze...

0
[losowa nazwa] napisał(a)

Mylisz sie. ArrayList przechowuje tylko REFERENCJE do obiektow a NIE ICH KOPIE. Gdy zmodyfikujesz obiekt, to ta zmiana bedzie widoczna za posrednictwem wszystkich referencji wskazujacych na ten obiekt.

Btw - nie uzywaj pol publicznych. Uzywaj pol prywatnych i publicznej metody setter'a albo ustawiaj wartosc op1 (co to za nazwa ?) w konstruktorze...

op1 jest to jedna przykładowa wartość, we właściwym programie mam ich kilkanaście, po prostu potrzebuje tablicy 2D dynamicznej, a nie statycznej tak jak mam obecnie, no ale w końcu do tego dojdę jak to zrobic;)

0

Musi być tak:

dym_klasa.op1="raz";
  a.add(dym_klasa);
dym_klasa=new Klasa(); //tego Ci brakowało
dym_klasa.op1="dwa";
  a.add(dym_klasa);
0
bo napisał(a)

Musi być tak:

dym_klasa.op1="raz";
  a.add(dym_klasa);
dym_klasa=new Klasa(); //tego Ci brakowało
dym_klasa.op1="dwa";
  a.add(dym_klasa);

Tak zrobilem niestety nie pomoglo, tj po wyswietlaniu:

 
a.get(0);
  System.out.print(dym_klasa.op1());

  a.get(1);
  System.out.print(dym_klasa.op1());

Nadal jest dwa dwa, a nie raz dwa;/

0

Źle wypisujesz

        System.out.println(a.get(0).getop1());
        System.out.println(a.get(1).getop1());
        //lub tak
        dym_klasa=a.get(0);
        System.out.println(dym_klasa.getop1());
        dym_klasa=a.get(1);
        System.out.println(dym_klasa.getop1());
0
bo napisał(a)

Źle wypisujesz

        System.out.println(a.get(0).getop1());
        System.out.println(a.get(1).getop1());
        //lub tak
        dym_klasa=a.get(0);
        System.out.println(dym_klasa.getop1());
        dym_klasa=a.get(1);
        System.out.println(dym_klasa.getop1());

Dziekowac, jak na razie dziala;) czas dalej pisac projekt

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