Schlüsselworte IF-Verzweigung

denisdw

Mitglied
Hallo Experten,

ich habe folgenden Code:

Java:
public class Papagei {
    boolean istMuede = true;
    boolean istHungrig = true;
    boolean istGestaerkt = false;

    public String gibSatz() {
        String satz = "";
        if (istHungrig && istMuede) {
            satz = "Ich bin hungrig und will ins Bett";
        } else if (istHungrig) {
            satz = "Ich bin hungrig";
        } else if (istMuede) {
            satz = "Gute Nacht";
        } else {
            satz = "Hallo Welt";
        }
       
        if (schlafe(istMuede)) & (esse(istHungrig)){
            istGestaerkt = true;
        }
       
        return satz;
    }
    
    public void sprich() {
        System.out.println(gibSatz());
    }
   
    public void schlafe(){
        istMuede = false;
    }
   
    public void esse(){
        istHungrig = false;
    }

    public static void main(String[] args) {
        Papagei alex = new Papagei();
        alex.sprich();
        alex.esse();
        alex.sprich();
        alex.schlafe();
        alex.sprich();
    }
}

Und bekomme den Fehler:


Es geht wohl um die Verzweigung mit den zwei Methoden "esse" und "schlafe", komm eaber irgendwie mit Syntax nicht klar.

Danke im Voraus.
VG, Denis
 

TheFrog

Aktives Mitglied
Guten Abend :D

Schau mal bei dir im Fehlercode. Da wird das &-Zeichen markiert mit einem ^ das heißt dort tritt ein Fehler auf. Du musst zwei &- Zeichen verwenden für eine und-Verknüpfung. Also &&.

deine Schlafe Methode nimmt auch keine Parameter an..
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
Die Klammersetzung passt auch nicht und außerdem brauchst du irgendeinen boolean-Wert in deiner if-Bedingung. Deine Methoden schlafe() und esse() geben auch nichts zurück (void). Das klappt also auch nicht.
 

denisdw

Mitglied
Hallo zusammen,

vielen Dank für die schnelle Rückmeldung erstmal!

@TheFrog: Das mit && hatte ich auch bereits im Kopf, aber was meinst Du mit der Methode Schlafe? Die ist doch genau so wie die Essen Methode?
@Tarrew: das die beiden Methoden keinen Rückgabewert haben, ist bewusst gemacht worden:

da es die Aufgabenstellung ist :

"Der Papagei soll nun schlafen und essen können. Lege dafür die zwei Methoden “schlafe” und “esse” an. Beide Methoden haben keinen Rückgabewert. Wenn der Papagei geschlafen hat, wird istMuede auf false gesetzt. Wenn der Papagei gegessen hat, dann wird istHungrig auf false gesetzt. Zusätzlich gibt es ein Attribut istGestaerkt. Jedes Mal wenn er isst oder schläft, wird dieses Attribut nach folgendem Schema neu gesetzt: Er ist nur gestärkt, wenn er nicht müde und nicht hungrig ist."

VG

Denis
 

Tarrew

Top Contributor
Du musst nur die Attribute istMuede und istHungrig abfragen. Die Methoden schlafe und esse erwarten ja ohnehin keinen Übergabeparamter.
 
X

Xyz1

Gast
da es die Aufgabenstellung ist :

"Der Papagei soll nun schlafen und essen können. Lege dafür die zwei Methoden “schlafe” und “esse” an. Beide Methoden haben keinen Rückgabewert. Wenn der Papagei geschlafen hat, wird istMuede auf false gesetzt. Wenn der Papagei gegessen hat, dann wird istHungrig auf false gesetzt. Zusätzlich gibt es ein Attribut istGestaerkt. Jedes Mal wenn er isst oder schläft, wird dieses Attribut nach folgendem Schema neu gesetzt: Er ist nur gestärkt, wenn er nicht müde und nicht hungrig ist."

und die Musterlösung ist:
Java:
    /**
     * will print:
     * Ich bin hungrig und will ins Bett (nicht so ganz)
     * Gute Nacht (nicht so ganz)
     * Hallo Welt (voller Kraft)
     */
    private static class Pap { // oder einfach public class ....

        private boolean istMuede = true;
        private boolean istHungrig = true;
        private boolean istGestaerkt = false;

        public Pap() {
            sprich();
            esse();
            sprich();
            schlafe();
            sprich();
        }

        public void sprich() {
            String satz;
            if (istHungrig && istMuede) {
                satz = "Ich bin hungrig und will ins Bett";
            } else if (istHungrig) {
                satz = "Ich bin hungrig";
            } else if (istMuede) {
                satz = "Gute Nacht";
            } else {
                satz = "Hallo Welt";
            }
            if (istGestaerkt) {
                satz += " (voller Kraft)";
            } else {
                satz += " (nicht so ganz)";
            }
            System.out.println(satz);
        }

        public void schlafe() {
            istMuede = false;
            setIstGestaerkt();
        }

        public void esse() {
            istHungrig = false;
            setIstGestaerkt();
        }

        public void setIstGestaerkt() {
            istGestaerkt = !istMuede && !istHungrig;
        }
    }

Edit: Mir ist gerade bemerkt, dass der Imperativ von essen iß/iss lautet.
 

VfL_Freak

Top Contributor
Moin,

Da wird das &-Zeichen markiert mit einem ^ das heißt dort tritt ein Fehler auf. Du musst zwei &- Zeichen verwenden für eine und-Verknüpfung. Also &&
BTW: das stimmt so nicht wirklich! Es sind beides UND-Verknüpfungen!

'&' ist bitwises UND, '&&' ist ein logisches UND
'&' wertet IMMER beide Seiten der Operation aus, während '&&' zunächst die linke Seite auswertet und die rechte Seite nur noch dann, wenn die linke Seite TRUE war.
Sprich: ist die erste Bedingung FALSE, wird die zweite gar nicht mehr ausgewertet !

Gilt für ODER '|' und '||' entsprechend ...
Gruß Klaus
 
X

Xyz1

Gast
Also entweder:
sprich, schlaf(e), iss
oder:
sprechen Sie, schlafen Sie, essen Sie,
2. Person Singular Präsens und 3. Person Plural Präsens Imperativ.

So sollte es konsistent sein. Aber ich will man nicht so nazihaft sein.

Eigentlich ist es egal, ob du "&" oder "&&" schreibst (in diesem Fall),
da geht's nur um ein paar Nanosekunden.
 
X

Xyz1

Gast
Da die Aufgabenstellung so gut beschrieben war, war das eine Fingerübung von 10 bis 20 SEKUNDEN (nicht Minuten) für mich, und C&P, warte ab: In geraumer Zeit kannst du das auch. :D
 

Ähnliche Java Themen

Neue Themen


Oben