Laden...

C# Rückgabewerte

Erstellt von netshark1000 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.638 Views
N
netshark1000 Themenstarter:in
23 Beiträge seit 2006
vor 17 Jahren
C# Rückgabewerte

Ich habe noch ein Problem mit den return-Statements. In meinem Programm simuliere ich ein Mensch Ärgere Dich nicht Spiel. Die unten stehende Methode soll dabei entscheiden, an welcher Position im Spielfeld das Püppchen steht, das gezogen werden soll. Ich brauche also einen int Rückgabewert.


private int Entscheide(string Farbe, int Augen, int Loch, int P1, int P2, int P3, int P4)
        {
         //Wo steht welches Püppchen
            int RelStart=0;
            if (Farbe == "rot")
                RelStart= 11;
            if (Farbe == "blau")
                RelStart = 21;
            if (Farbe == "gruen")
                RelStart = 31;
            if (Farbe == "gelb")
                RelStart = 41;

            //Relative Positionen
            P1 = (P1 - RelStart)%40;
            P2 = (P2 - RelStart)%40;
            P3 = (P3 - RelStart)%40;
            P4 = (P4 - RelStart)%40;
            
            //Ranking - eventuell noch Sortieralgorithmus implementieren
            int Erster = P1;
            if ((P2 > P1)&(P2 > P3)&(P2>P4))
                Erster = P2;
            if ((P3>P1)&(P3 > P2)&(P3>P4))
                Erster = P3;
            if ((P4>P1)&(P4>P2)&(P4>P3))
                Erster = P4;


            
            //Entscheidung, welches Püppchen ziehen soll
           
            //Wenn 6 gewürfelt wurde und im Loch noch Püpchen stehen -> rauskommen
            if ((Augen == 6) & (Loch > 0))
            {
                return RelStart;
            }
            //Wenn im Loch nichts mehr steht
            if (Loch == 0)
            {
                Erster = (Erster + RelStart) % 40;
                return Erster;
            }
        }
    }


Mein Problem ist jetzt, dass der Compiler anmeckert, dass nicht alle Code Path einen Rückgabewert liefern. Wie korrigiert man das? Oder gibt es diese Meldung nur, wenn die Möglichkeit besteht, dass man an den 2 Return-statements vorbei kommt?

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo netshark1000,

Compilerfehler sollte man auch als Anfänger leicht selbst lösen können/lernen. Dazu am besten die Fehlernummer (CSnnnn) in den Index der SDK-/MSDN-Doku eingeben. Dort werden meist an Codebeispielen gezeigt wie/wodurch der Fehler entsteht und wie man den Code ändern muss, um den Fehler zu vermeiden. Der konkrete Fehler ist leicht zu beheben. Du hast ja auch schon die richtige Vermutung angestellt.

BTW: if ((Augen == 6) & (Loch > 0)) soll bestimmt if ((Augen == 6) && (Loch > 0)) heißen.

herbivore

J
5 Beiträge seit 2005
vor 17 Jahren

Hallo netshark1000,

du musst einfach nach dem letzten if noch einen return reinsetzen (einen default wert), wenn beide schleife false ergeben sollten.


            if ((Augen == 6) && (Loch > 0))
            {
                return RelStart;
            }
            //Wenn im Loch nichts mehr steht
            if (Loch == 0)
            {
                Erster = (Erster + RelStart) % 40;
                return Erster;
            }
            return 0;

wegen dem if ((Augen == 6) & (Loch > 0)) wirft er keinen Fehler, aber keine Ahnung wie er das interpretiert...

lg,
JohnFox

M
1.439 Beiträge seit 2005
vor 17 Jahren

Natürlich wirft der Compiler keinen Fehler.
Denn & auf boolsche Werte angewendet hat die selbe Bedeutung wie &&, nur dass beide Seiten immer ausgewertet werden.