ďťż
 
Problem - ArrayList i obiekty .... ďťż
 
Problem - ArrayList i obiekty ....
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com