Instrukcja Continue - kod programu

0

Cześć,

Jestem nowy na forum i mam nadzieję, że nie powtarzam tematu. Przerabiam teraz instrukcje continue. Już parę przykładów rozgryzłem i przerobiłem. Ale poniższego przykładu nie jestem w stanie objąć. Bardzo chciałbym prosić kogoś o pomoc w zrozumieniu kodu.
IMG_20220405_220626.jpg

4

A któż wydał tak wybitną książkę? I jeszcze autor wypowiada się n/t poprawności czegokolwiek ...

Temat jest w 99.9% przypadków do ładnego zrobienia, między innymi przez ekstrakcję metody.

Przez kilkanaście lat w Javie jeszcze nigdy nie napisałem tam etykiety.

EDIT: książkę wyrzuć, zapij, zapomnij że kiedykolwiek widziałeś

3

Już nie przesadzaj.

To jest książka do nauki podstaw i widać, że autor zaznajamia czytelnika z instrukcjami dostepnymi w jezyku.

Możliwe, że nawet potem, drukowanymi literami napisał, żeby tego nie robić, także się tak nie spinaj człowieku.

Ogólnie z instrukcją goto to zabawna sprawa, bo kazdy sraczki dostaje na jej widok, a później 99 procent tych ludzi streruje flow programu rzucając wyjątki i łapiąc 30 warstw wyżej :)

Co do pytania.
W każdym obiegu wewnętrznej pętli, gdy kod dotrze do instrukcji continue, to zaczyna ponowne wykonanie najbardziej zewnętrznej pętli, bo tam zdefiniowana jest ta etykieta, na którą wskazuje continue.

0

@urke:

Nooo o ile bym "jakoś" akceptował goto w dół, goto do początku to inna kategoria psychiatryczna, zastrzyk i kaftan za sam wygląd oczu.

Co więcej jakby tu były jakieś inicjacje, by była (może) odmowa kompilacji (w C++ to chyba by mogło zajść, czy w Javie, może ....)

@Paweł Piełot: jaki to autor ?

0

Część.
Tytuł i autor to : Java Kompendium programisty Herbert Schildt. Książka raczej z tego co czytałem ma dobrą opinię. Akurat dla tego kodu starałem się rozpisać działanie każdej linii wyświetlonej na kartce. Ale jak na razie nic totalne zero. Przeszedłem przez system binarny i szesnastkowy. A Tu zagięła mnie taka ot instrukcja.

2

Tak działa wersja taka jak w książce

* Wchodzimy do outer loop (ta z i), i == 0
* Wchodzimy do inner loop (ta z j), i == 0, j == 0
* Wchodzimy do ifa, który zwraca false, bo 0 < 0 == false
* Wchodzimy do printa, który drukuje 0, bo 0 * 0 = 0
* Wchodzimy do inner loop (ta z j), i == 0, j == 1
* Wchodzimy do ifa, która zwraca true, bo 1 > 0
* Wchodzimy do wnętrza ifa, który drukuje pustą linię
* Wchodzimy do instrukcji continue, która przenosi nad do outer loop (ta z i) <--- Tu się dzieją rzeczy
* Wchodzimy do outer loop (ta z i), i == 1
* Wchodzimy do inner loop (ta z j), i == 1, j == 0
* Wchodzimy do ifa, który zwraca false, bo 0 < 1 == false
* Wchodzimy do printa, który drukuje 0, bo 1 * 0 = 0
* Wchodzimy do inner loop (ta z j), i == 1, j == 1
* Wchodzimy do ifa, który zwraca false, bo 1 < 1 == false
* Wchodzimy do printa, który drukuje 1, bo 1 * 1 = 1
* Wchodzimy do inner loop (ta z j), i == 1, j == 2
* Wchodzimy do ifa, która zwraca true, bo 2 > 0
* Wchodzimy do wnętrza ifa, który drukuje pustą linię
* Wchodzimy do instrukcji continue, która przenosi nad do outer loop (ta z i)
* Wchodzimy do outer loop (ta z i), i == 2
* Wchodzimy do inner loop (ta z j), i == 2, j == 0
* I tak dalej...

Dla porównania, tak działałaby wersja gdyby zamiast continue outer; napisać samo continue;

* Wchodzimy do outer loop (ta z i), i == 0
* Wchodzimy do inner loop (ta z j), i == 0, j == 0
* Wchodzimy do ifa, który zwraca false, bo 0 < 0 == false
* Wchodzimy do printa, który drukuje 0, bo 0 * 0 = 0
* Wchodzimy do inner loop (ta z j), i == 0, j == 1
* Wchodzimy do ifa, która zwraca true, bo 1 > 0
* Wchodzimy do wnętrza ifa, który drukuje pustą linię
* Wchodzimy do instrukcji continue, która przenosi nad do inner loop (ta z j)
* Wchodzimy do inner loop (ta z j), i == 0, j == 2
* Wchodzimy do ifa, która zwraca true, bo 2 > 0
* Wchodzimy do wnętrza ifa, który drukuje pustą linię
* Wchodzimy do instrukcji continue, która przenosi nad do inner loop (ta z j)
* Wchodzimy do inner loop (ta z j), i == 0, j == 3
* Wchodzimy do ifa, która zwraca true, bo 3 > 0
* Wchodzimy do wnętrza ifa, który drukuje pustą linię
* Wchodzimy do instrukcji continue, która przenosi nad do inner loop (ta z j)
* Wchodzimy do inner loop (ta z j), i == 0, j == 4
* I tak dalej...

Tak jak pisali wyżej. Etykiety to element składni i warto wiedzieć, że coś takiego istnieje, ale nie jest najszczęśliwszy mechanizm i nie zaleca się jego stosowania. Istnieje mała szansa, że kiedyś go zobaczysz w komercyjnym kodzie (o ile nie trafisz do szamba)

0

Dziękuję bardzo.

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