Zastąpienie instrukcji goto

Odpowiedz Nowy wątek
2010-11-30 11:43

Rejestracja: 9 lat temu

Ostatnio: 9 lat temu

0

Witam. Mam taki kod, już po części przełożony na Javę. Wiem, że w Javie nie ma instrukcji goto, są jednak etykiety oraz break i continue i zapewne można tutaj je wykorzystać. Lecz nie wiem jak.

Mój kod:

public void lock(int i)
    {
        L: flag[i]=1; //pseudokod
        otheri=turn;
        while(otheri!=i)
        {
            testi=flag[otheri];
            if(testi==0) turn=i;
            otheri=turn;
        }

        flag[i]=2;
        for(k=0;k<n;k++)
            if(k!=i)
            {
                testi=flag[k];
                if(testi==2) goto L; //pseudokod
            }
    } 

Pytanie jak zamienić linie oznaczone w kodzie pseudokod aby w Javie program można było uruchomić i był zgodny oczywiście z warunkiem tego goto?

Pozostało 580 znaków

2010-11-30 12:09

Rejestracja: 12 lat temu

Ostatnio: 1 minuta temu

0

Łojesuziemaryjo... jak już potrzebujesz to break nazwa_etykiety. zapytam się jednak dlaczego koniecznie chcesz skorzystać z etykiet, instrukcji break i continue? Przecież taki kod to jest Sajgon. Zamiast przekładać kod z Pascala czy innego COBOLa może warto napisać go od nowa i mieć coś lepszego?

Pozostało 580 znaków

ŁF
2010-11-30 12:58
ŁF
Moderator

Rejestracja: 17 lat temu

Ostatnio: 1 tydzień temu

0

Masakra...

public void lock(int i)
    {
        L: flag[i]=1; //pseudokod
        otheri=turn;
        while(otheri!=i)
        {
            testi=flag[otheri];
            if(testi==0) turn=i;
            otheri=turn;
        }

        flag[i]=2;
        for(k=0;k<n;k++)
            if(k!=i)
            {
                testi=flag[k];
                if(testi==2) { lock(i); break; }
            }
    }

będzie działać, ale tylko dlatego, że część zmiennych masz definiowaną niewiadomogdzie i przyjąłem dla prostoty, że są to zmienne globalne dla funkcji. tak się nie pisze kodu - nie wychodzi się z pętli skokiem goto, w ogóle goto się nie używa, powoduje ono, że kod staje się nieczytelny. zamknij ten swój pseudokod w większą pętlę i obejdzie się bez skoków.


edytowany 2x, ostatnio: ŁF, 2010-11-30 13:03

Pozostało 580 znaków

eeee
2010-11-30 15:16
eeee
0

http://pl.wikipedia.org/wiki/Spaghetti_code :)

Pozostało 580 znaków

Odpowiedz

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