Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problem z pętlą

0 views
Skip to first unread message

stasio

unread,
Nov 29, 2009, 6:32:21 PM11/29/09
to
witam, zaczynam nauk� programowania w javie i mam nast�puj�cy problem z
p�tl�.

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

Brzezi

unread,
Nov 29, 2009, 6:40:16 PM11/29/09
to
pon, 30 lis 2009 o 00:32 GMT, stasio napisaďż˝(a):

> (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

ruf10

unread,
Nov 29, 2009, 6:50:34 PM11/29/09
to
stasio pisze:

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ďż˝

stasio

unread,
Nov 30, 2009, 3:24:37 AM11/30/09
to
Brzezi wrote:
> pon, 30 lis 2009 o 00:32 GMT, stasio napisaďż˝(a):
>
>> (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]);

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

stasio

unread,
Nov 30, 2009, 3:53:27 AM11/30/09
to
ruf10 wrote:
> stasio pisze:

>> (3) for ( Ship cell : s[j-1] ) { cell = new Ship(3); }
>>
>> 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?
>
> 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.

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

ruf10

unread,
Nov 30, 2009, 4:16:37 AM11/30/09
to
stasio pisze:

> ruf10 wrote:
>> stasio pisze:
>>> (3) for ( Ship cell : s[j-1] ) { cell = new Ship(3); }
[...]

> 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 ( : )?

Tak naprawd� musisz poczyta� o typach referencyjnych i czym r�ni si� zmienna od obiektu na kt�ry wskazuje.

stasio

unread,
Nov 30, 2009, 4:18:56 AM11/30/09
to

czy m�g�by� napisa� jak powinna by� zapisana linia (3) w sk�adni for ( :
) abym m�g� go sobie przeanalizowa�?

stasiek

Brzezi

unread,
Nov 30, 2009, 6:49:14 AM11/30/09
to
pon, 30 lis 2009 o 10:18 GMT, stasio napisaďż˝(a):

> czy m�g�by� napisa� jak powinna by� zapisana linia (3) w sk�adni for ( :
>) abym m�g� go sobie przeanalizowa�?

niedasie

Pozdrawiam
Brzezi

stasio

unread,
Nov 30, 2009, 7:52:28 AM11/30/09
to

dzi�ki serdeczne. mam jeszcze pytanie, czy moje rozumowanie zamieszczone
w odpowiedzi na Twojego poprzedniego posta w tym w�tku jest poprawne?

pozdrawiam,
stasiek

pikson

unread,
Nov 30, 2009, 10:26:58 AM11/30/09
to
On 30 Lis, 13:52, stasio <sta...@com.pl> wrote:
>(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.


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

pikson

unread,
Nov 30, 2009, 10:38:39 AM11/30/09
to

Sorry,
chodziło mi o kod:


Object o1 = new Object();
Object o2 = o1;

o2 = new Object();

Poprzedni by się nie skompilował :)

Pozdrawiam
Tomek

0 new messages