Jak się pozbyć goto?

0

Wiem, że nie ma czegoś takiego jak goto w javie, ale nie potrafię sobie poradzić pętlami, mimo iż próbowałem. Jestem początkujący. Będę wdzięczny jeśli ktoś mi pokaże co z tym można zrobić.

Urywek kodu:

 _L8:
        int l = Pierwszy(j);
        if(!CzyJestPusta(j)) goto _L2; 
        else goto _L1
_L1:
        if(l != -1) goto _L4; else goto _L3
_L4:
        j = l;
_L2:
        int k;
        if(i != 3)
            k = 0;
        else
            k = PoszukajNajkrotszego(j);
          goto _L5
_L9:
        if(tablica[k].wykonany || j < tablica[k].czas_nadejscia)
            break; /* Loop/switch isn't completed */
        if(tablica[k].czas_zaczecia == -1)
            tablica[k].czas_zaczecia = j - tablica[k].czas_nadejscia;
        if(i == 1 || i == 2 || i == 4)
        {
            Pokaz(j, k, tablica[k].czas_trwania);
            j += tablica[k].czas_trwania;
            tablica[k].czas_do_ukonczenia = 0;
        }
        if(i == 3 || i == 5)
        {
            int i1 = Pierwszy(j);
            if(i1 == -1 || i1 - j >= tablica[k].czas_do_ukonczenia)
            {
                Pokaz(j, k, tablica[k].czas_do_ukonczenia);
                j += tablica[k].czas_do_ukonczenia;
                tablica[k].czas_do_ukonczenia = 0;
            } else
            {
                i1 -= j;
                Pokaz(j, k, i1);
                j += i1;
                tablica[k].czas_do_ukonczenia -= i1;
            }
        }
        if(i == 6)
            if(tablica[k].czas_do_ukonczenia <= dl_kwantu)
            {
                Pokaz(j, k, tablica[k].czas_do_ukonczenia);
                j += tablica[k].czas_do_ukonczenia;
                tablica[k].czas_do_ukonczenia = 0;
            } else
            {
                Pokaz(j, k, dl_kwantu);
                j += dl_kwantu;
                tablica[k].czas_do_ukonczenia -= dl_kwantu;
            }
        if(tablica[k].czas_do_ukonczenia == 0)
        {
            tablica[k].wykonany = true;
            tablica[k].czas_zakonczenia = j - tablica[k].czas_nadejscia - tablica[k].czas_zaczecia;
        }
        if(i == 6) goto _L7; else goto _L6;
_L7:
        continue; /* Loop/switch isn't completed */
_L6:
        break; /* Loop/switch isn't completed */
        k++;
_L5:
        if(k < ile) goto _L9; else goto _L8;
_L3:
        if(rysuj)
            PokazLegende();
        return j;
0

Te break i continue to do czego się odnoszą?

0

Starałem się to jakoś pętlami zastąpić, to pozostałości. Teraz tego ogarnąć nie mogę, a inaczej nie potrafię przedstawić rozwiązania problemu.

1
marian85 napisał(a)

inaczej nie potrafię przedstawić rozwiązania problemu.

Przede wszystkim JAD nie potrafi. Możesz ładnie poprosić autora o udostępnienie kodu lub użyć sprawniejszego dekompilatora.

0

Jak nie da rady tego jakoś przedstawić pętlami to trudno.

1

Bierzesz kartkę i jedziesz, to tak ciężko? Rozrysowujesz sobie jak działa, pętle rzucają się od razu w oczy :)

0

Przypatrz się i zauważysz, że to nie takie proste.

0
marian85 napisał(a)

to nie takie proste.

To jest bardzo proste, wystarczy wciągnąć thunki, to zwykłe podstawienie. Jedyne, co nie jest oczywiste:

        break; /* Loop/switch isn't completed */
        k++;

Ten kod może oznaczać, że JAD coś pomylił, ew. autor kodu się nie popisał.

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