Zastąpienie instrukcji goto

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?

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?

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.

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