Ship[][] s;
s = new Ship[5][];
(1) for ( j=s.length; j>0; j-- ) {
(2) s[j-1] = new Ship[6];
(3) for ( Ship cell : s[j-1] ) { cell = new Ship(3); }
(4) System.out.println( s[j-1][0].x );
(5) }
powy�szy kod kompiluje si� ale pojawia si� b��d podczas wykonywania:
Exception in thread "main" java.lang.NullPointerException
dzia�a natomiast modyfikacja trzeciej linii do postaci:
(3) for ( i=s[j-1].length; i>0; i-- ) { s[j-1][i-1] = new Ship(3); }
nie potrafi� tego rozgry��. gdzie pope�niam b��d?
stasiek
> (3) for ( Ship cell : s[j-1] ) { cell = new Ship(3); }
Prosty test na pokazanie co zle rozumiesz:
String[] tab = new String[5];
String foo = tab[0];
foo = "bar";
System.out.println(foo);
System.out.println(tab[0]);
> (4) System.out.println( s[j-1][0].x );
Pozdrawiam
Brzezi
Zapomnia�e� przypisa� cell do s[j-1][i-1]
Sam wpad�by� na odpowied� gdyby� sprawdzi� sk�d dok�adnie leci NPE i dlaczego.
Rafaďż˝
rozumiem podany przyk�ad nast�pujaco: zmienna tab jest referencj� na
tablic� 5 obiekt�w String (ale �aden element tab[i] "nie wskazuje"
jeszcze na �aden String), dalej zmienna foo wskazuje na obiekt String,
na kt�ry wskazuje tab[0] (a kt�rego to obiektu jeszcze nie ma), dalej
zmienna foo wskazuje na String z zawarto�ci� "bar". wy�wietlane wyniki
s� dla mnie zrozumia�e, ale nie potrafi� odnie�� tego przyk�adu do
mojego problemu z p�tl�.
rozumujďż˝ tak:
Ship[][] s;
// s jest referencj� na dwuwymiarow� tabel� obiekt�w Ship
s = new Ship[5][];
// element s[k] staje si� referencj� do tabeli obiekt�w Ship,
// kt�rej jeszcze nie ma
(1) for ( j=s.length; j>0; j-- ) {
(2) s[j-1] = new Ship[6];
// ka�dy element s[j-1] staje si� dobrze okre�lon� referencj� na Ship[6]
// obiekt�w Ship w tej tabeli jeszcze nie ma
(3) for ( Ship cell : s[j-1] ) { cell = new Ship(3); }
// no i teraz po Waszych uwagach mam w�tpliwo�ci co si� tu dzieje
// z zapisu rozumuj�, i� cell jest obiektem Ship, kt�re to z kolei s�
// elementami s[j-1], co chyba nie jest prawdďż˝, bo elementy s[j-1]
// s� referencjami na jednowymiarowe tabele obiekt�w Ship.
czy dobrze rozumuj�? czy w og�le da si� zapisa� ww. p�tl� w notacji for
z cell?
pozdrawiam,
stasiek
nie rozumiem: jak mog� przypisa� cell do s[j-1][i-1] kiedy w�a�nie nie
chc� u�ywa� zmiennej i? czy da si� zapisa� pierwszy przyk�ad linii (3)
poprawnie w tej sk�adni for ( : )?
stasiek
Tak naprawd� musisz poczyta� o typach referencyjnych i czym r�ni si� zmienna od obiektu na kt�ry wskazuje.
czy m�g�by� napisa� jak powinna by� zapisana linia (3) w sk�adni for ( :
) abym m�g� go sobie przeanalizowa�?
stasiek
> czy m�g�by� napisa� jak powinna by� zapisana linia (3) w sk�adni for ( :
>) abym m�g� go sobie przeanalizowa�?
niedasie
Pozdrawiam
Brzezi
dzi�ki serdeczne. mam jeszcze pytanie, czy moje rozumowanie zamieszczone
w odpowiedzi na Twojego poprzedniego posta w tym w�tku jest poprawne?
pozdrawiam,
stasiek
Niestety źle to rozumiesz.
cell jest zmienną typu Ship wskazującą na nowo utworzony obiekt.
Po przypisaniu:
cell = new Ship(3)
to na co wskazuje cell nie ma już wogóle związku z tablicą s.
Tak jak wcześńiej pisano musisz poczytać o zmiennych w Javie.
Object o1 = new Object();
Object o2 = o1;
Object o2 = new Object();
Powyższy kod nie zmienia referencji zmiennej o1!!
Pozdrawiam
Tomek
Sorry,
chodziło mi o kod:
Object o1 = new Object();
Object o2 = o1;
o2 = new Object();
Poprzedni by się nie skompilował :)
Pozdrawiam
Tomek