found int but expect boolean

Endymion

Bekanntes Mitglied
Ich habe in folgendem Code ein Problem:
Java:
import java.util.Random;
class SPIELSTEUERUNG
{
    //Attribute
    int punkteStand;
    int leben;
    int level;
    int punktewertNormalerKruemel;
    int punktewertPowerkruemel;
    LABYRINTH labyrinth;
    MAMPFI mampfi;
    STEUERUNGSANZEIGE steuerung;
    MONSTER[] monsterliste;
    Random ZufallszahlGenerator;
    SPIELSTEUERUNG()
    {
        punkteStand = 0;
        leben = 3;
        level = 1;
        labyrinth = new LABYRINTH();
        mampfi = new MAMPFI(labyrinth, labyrinth.MampfiStartXGeben(), labyrinth.MampfiStartYGeben());
        steuerung = new STEUERUNGSANZEIGE();
        steuerung.Anmelden(this);
        punktewertNormalerKruemel = 1;
        punktewertPowerkruemel = 1;
        monsterliste = new MONSTER[4];
        for (int zaehler = 0; zaehler <= 4; zaehler = zaehler+1)
        {
            monsterliste[zaehler] = new MONSTER(labyrinth, labyrinth.MonsterStartXGeben(zaehler), labyrinth.MonsterStartYGeben(zaehler));
        }
    }
    void AufTasteReagieren(int taste)
    {
        switch(taste)
        {
            case 37:
            mampfi.NachWestenBlicken();
            break;
            case 38:
            mampfi.NachNordenBlicken();
            break;
            case 39:
            mampfi.NachOstenBlicken();
            break;
            case 40:
            mampfi.NachSüdenBlicken();
            break;
            case 83:
            steuerung.TickerStarten(500);
            break;
            
        }
    }
    void SpielzugAuswerten()
    {
        if (labyrinth.KruemelbelegungAnzeigen(mampfi.PositionXGeben(), mampfi.PositionYGeben()) == 'P')
        {
            mampfi.UnverwundbarMachen();
            KruemelEntfernen();
            punkteStand = punkteStand+punktewertPowerkruemel;
            steuerung.PunkteStandSetzen(punkteStand);
        }
        else
        {
            if(labyrinth.KruemelbelegungAnzeigen(mampfi.PositionXGeben(), mampfi.PositionYGeben()) == 'N')
            {
                KruemelEntfernen();
                punkteStand = punkteStand+punktewertNormalerKruemel;
                steuerung.PunkteStandSetzen(punkteStand);
            }
        }
    }
    void KruemelEntfernen()
    {
        labyrinth.KruemelEntfernen(mampfi.PositionXGeben(), mampfi.PositionYGeben());
    }
    void Tick()
    {
        switch (mampfi.BlickRichtungGeben())
        {
            case 'N':
            mampfi.NachNordenBewegen();
            SpielzugAuswerten();
            break;
            case 'S':
            mampfi.NachSüdenBewegen();
            SpielzugAuswerten();
            break;
            case 'W':
            mampfi.NachWestenBewegen();
            SpielzugAuswerten();
            break;
            case 'O':
            mampfi.NachOstenBewegen();
            SpielzugAuswerten();
            break;
        }
        for (int zaehler = 0; zaehler = labyrinth.MonsterZahlGeben(); zaehler++)
        {
            switch(ZufallszahlGenerator.nextInt(7))
            {
            }
        }
    }
}
Ich bekomme jetzt in Zeile 98 die Fehlermeldung: "incompatible types - found int but expect boolean". Ich weiß jetzt aber nicht wirklich was ich falschgemacht habe. Wenn ich da jetzt alles auf boolean umschreibe bekomme ich zwar keine Fehlermeldung mehr, aber das will ich ja nicht. Kann mir jemand helfen?
 
[JAVA=98]for (int zaehler = 0; zaehler = labyrinth.MonsterZahlGeben(); zaehler++)[/code]
Der zweite Teil in deiner for-Schleife lässt sich nicht als boolean auswerten. Du musst aber in irgendeiner Weise eine Grenze angeben, bis zu der die Schleife laufen soll.
 
ok danke, das mit dem == hat funktioniert.

Das Funktionieren ist nicht so wichtig, auf das Verstehen kommt es an.

= ist der Zuweisungsoperator, und der hat auch einen Wert, nämlich das, was gerade zugewiesen wird. Deshalb funktionieren auch so Sachen wie a = b = c = 42 (weil = rechts-assoziativ ist, also als a = (b = (c = 42)) ausgewertet wird).

== ist der Vergleichsoperator für primitive Typen (int, double...) und Objektreferenzen (weshalb man für Objekte normalerweise die equals-Methode benutzt, siehe einen der unzähligen Threads mit dem Thema "warum funktioniert string1 == string2 nicht?")

Problematisch wird es, wenn man eigentlich zwei booleans vergleichen will (==), aber versehentlich zuweist (=), weil bei der Zuweisung ja dann auch ein boolean herauskommt, und der Compiler nicht wie in deinem Beispiel meckert. Und deshalb ist es auch so wichtig, den Unterschied der beiden Operatoren genau zu kennen und zu verstehen, weil man sonst böse reinfallen kann und sich einen Ast nach dem Fehler sucht.
 
Zuletzt bearbeitet:

Zurück
Oben