Problem - ArrayList i obiekty ....
Gimli - 07-06-2006 00:48
Problem - ArrayList i obiekty ....
Witam.
Jak w temacie - mam problem przy dodawaniu do arraylist obiektow. Gdy dodaje metoda add nowy obiekt te ktore dodalem wczesniej sa zamieniane na dodawany. Jezeli zamiast obiektow dodaje np. gole wartosci - wszystko jest poprawne. Nie rozumiem dlaczego ta metoda dziala tak dziwnie. Czy jest ktos w stanie mi to wyjasnic ?? Nie jestem expertem i byc moze mam skrzywienie w strone delphi - ale na zdrowy rozsadek to powinno dzialac a nie chce ....
pozdrawiam,
Jaro
Ponizej kod programiku :
import java.util.*;
class Dane {
public int ind = 0; public String opis = null; public String opis1 = null;
}
public class Klasa_1 {
public Klasa_1() {
}
public static void main(String[] args)
{ List X = new ArrayList();
System.out.println("START"); System.out.println("");
Dane wej = new Dane();
for (int i = 0 ; i < 10; i++) {
wej.ind = i; wej.opis1="ABCD :"+Integer.toString(i); wej.opis="DANA :"+Integer.toString(i);
X.add(i,wej);
System.out.println(wej.opis);
System.out.println("");
}
for (int i=0 ; i < X.size() ; i++) {
Dane wyj = (Dane) X.get(i);
System.out.println(wyj.opis);
}
System.out.println(""); System.out.println("STOP");
}
}
=?ISO-8859-2?Q?Pawe=B3_Walczak?= - 07-06-2006 00:48
W Javie obiekty, poza typami prostymi, są przekazywane przez referencję, co oznacza, że wciąż dodajesz ten sam obiekt. Zmieniasz mu tylko właściwości.
- pw
Marcin Wielgus - 07-06-2006 00:48
hmmm, problem polega na tym, ze ty dodajesz do listy ten sam obiekt 10 razy. w petli zmieniasz tylko wartosci atrybutow tego obiektu. Popatrz na to tak jakbys przekazywal do listy wskazanie do obiektu - poniewaz zawsze jest to to same wskazanie i modyfikujesz wartosci atrybutow tez poslugujac sie tym samym wskazaniem to otzrmasz w efekcie to co otrzymujesz;) (dlaczego tak trudno sie to tlumaczy;) zamiast: Dane wej = new Dane(); for (int i = 0 ; i < 10; i++) { wej.ind = i; wej.opis1="ABCD :"+Integer.toString(i); wej.opis="DANA :"+Integer.toString(i); X.add(i,wej); }
zrob:
for (int i = 0 ; i < 10; i++) { Dane wej = new Dane(); wej.ind = i; wej.opis1="ABCD :"+Integer.toString(i); wej.opis="DANA :"+Integer.toString(i); X.add(i,wej); }
i sie z tym przespij;)
-- pozdrawiam SaSol
=?ISO-8859-2?Q?Pawe=B3_W=F3jciak?= - 07-06-2006 00:48
Gimli napisał(a): > Witam. > > Jak w temacie - mam problem przy dodawaniu do arraylist obiektow. Gdy dodaje > metoda add nowy obiekt te ktore dodalem wczesniej sa zamieniane na dodawany. > Jezeli zamiast obiektow dodaje np. gole wartosci - wszystko jest poprawne. > Nie rozumiem dlaczego ta metoda dziala tak dziwnie. > Czy jest ktos w stanie mi to wyjasnic ?? Nie jestem expertem i byc moze mam > skrzywienie w strone delphi - ale na zdrowy rozsadek to powinno dzialac a > nie chce .... > > pozdrawiam, > > Jaro > > Ponizej kod programiku : > > import java.util.*; > > class Dane { > > public int ind = 0; > public String opis = null; > public String opis1 = null; > > } > > public class Klasa_1 { > > public Klasa_1() { > > } > > public static void main(String[] args) > > { > List X = new ArrayList(); > > System.out.println("START"); > System.out.println(""); > > Dane wej = new Dane();
Tutaj tworzysz obiekt wej > > for (int i = 0 ; i < 10; i++) > { > > wej.ind = i; > wej.opis1="ABCD :"+Integer.toString(i); > wej.opis="DANA :"+Integer.toString(i); > tutaj ustawiasz jego pola
> X.add(i,wej);
a tutaj dodajesz go do listy. Zauważ, że cały czas dodajesz ten sam obiekt (tą samą instancję klasy Dane). Jeśli przeniesiesz tworzenie nowego obiektu klasy Dane do pętli, będzie działać. > > > System.out.println(wej.opis); > > System.out.println(""); > > } > > for (int i=0 ; i < X.size() ; i++) > { > > Dane wyj = (Dane) X.get(i); > > System.out.println(wyj.opis); > > } > > System.out.println(""); > System.out.println("STOP"); > > } > > } > >
Pozdrawiam, Pablo
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.plabsolwenci.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|