Java Boolsche Werte einer Methode weiterleiten

money2000

Well-known member
ID: 157808
L
23 Mai 2006
491
34
Für einige mag das bestimmt simpel klingen, aber ich bin noch nicht dahinter gekommen :D

Also:
Ich programmiere in BlueJ, es gibt ein Projekt namens Tamagotchi mit einer Klasse desselben Namens.
Objekte der Klasse können ihre Zustände nicht selbst ändern. Wenn der Tamagotchi Hunger haben soll, so gibt man in der Methode füttern negative Werte an.

Jetzt habe ich sondierende Methoden implentiert, die bei bestimmten Zuständen der Variablen (z.B. Hunger > 5 ) true bzw. false ausgeben (boolsche Werte halt ;) )

Jetzt möchte ich eine Methode implentieren, die true wiedergibt, wenn die drei sonderienden Methoden alle false sind.

Wenn ich aber annehme

Code:
public boolean methodenname()
{
   if (methode1 == false && methode2 == false && methode3 == false)
   {
      return true
   }
      return false
}

sagt er dass methode1 (weils als erstes erwähnt wird^^) keine Variable ist.

Wie ändere ich das jetzt?

Freue mich über Hilfe :)
 
Naja was du machst ist keine methode aufrufen sondern eine variable abfragen. In Java sind die klammern () hinter dem methoden name nicht optional :D
 
Die Methode soll ja keine Werte vom Benutzer abfragen sondern nur true oder false wiedergeben deshalb steht ja nichts in dern Klammern.

Aber wie geht es, dass er true liefert wenn die 3 anderen Methoden false sind?
 
Die Methode soll ja keine Werte vom Benutzer abfragen sondern nur true oder false wiedergeben deshalb steht ja nichts in dern Klammern.
Wurscht, ob es Parameter gibt oder nicht. Als Rückgabetype boolean verwenden, dann hast du eine boolsche Methode.
PHP:
public boolean isHungry() {
    return true;
}
mag zwar sinnbefreit sein, is aber syntaktisch korrekt und müsste das sein, was du suchst.
 
Ich gib mal den Code gekürzt an ;)

Code:
class Tamagotchi
{

    private int _hunger;
    private int _durst;
    private boolean _muede;
    
    /**
     * Ein neues Tamagotchi hat einen definierten Anfangszustand:
     * weder hungrig noch ueberfressen, nicht durstig und nicht muede.
     */
    public Tamagotchi()
    {
        _hunger = 0;
        _durst = 0;
        _muede = false;
    }

    // veraendernde Methoden

[I]Hier würden jetzt eigentlich Methoden stehen zur Änderung von _hunger, _durst, _muede[/I]

    //Sondierende Methoden
    
    /** Gibt an, ob das Tamagotchi ausgeglichen ist. Trifft zu, wenn es kein Hunger und keinen Durst hat und nicht müde ist. Treffen die Aussagen zu, ist es nicht ausgeglichen.
     * 
     */
    public boolean istAusgeglichen()
    {
        if (_hunger > 0 && _durst > 0 && _muede == true)
        {
            return false;
        }
        
        return true;
    }
    
    
    /** Gibt an, ob das Tamagotchi fröhlich ist. Trifft zu, wenn es nicht müde ist, es etwas gesättigt ist (Wert unter -5), und es kaum Durst hat (Wert unter 4)
     * 
     */
    public boolean istFröhlich()
    {
        if (_muede = false && _hunger < -5 && _durst < 4)
        {
            return true;
        }
        
        return false;
    }
    
    
    /** Gibt an, ob das Tamagotchi gereizt ist. Trifft zu, wenn es Hunger hat und der Hunger doppelt so hoch ist, wie sein Durstwert.
     * 
     */
    public boolean istGereizt()
    {
        if (_hunger > 0 & 2*_hunger == _durst)
        {
            return true;
        }
        
        return false;
    }
    
    /**Ist erfüllt, wenn die anderen 3 Methoden false sind
    *
    */
    public boolean istGelangweilt()
    {
        if (istAusgeglichen() && istFröhlich() && istGereizt())
        {
            return true;
        }
        return false;
    }
    
    
    
}

So oder wie?

Edith: Bei istGelangweilt sollen die 3 vorigen Methoden false sein, damit sie true ist.
 
Du könntest entweder überall ein == false hin machen, jedes mit ! verneinen, oder return true, und return false vertauschen:ugly:
 
Ihr könnt aber auch ziemlich weit um den heissen Brei herum reden...
PHP:
return !(a() || b() || c());
// Oder nach den deMorgan'schen Regeln
return !a() && !b() && !c();
 
Ich gib mal den Code gekürzt an ;)

(...)

So oder wie?

Edith: Bei istGelangweilt sollen die 3 vorigen Methoden false sein, damit sie true ist.
So ähnlich, die letzte Methode stimmt noch nicht ganz meiner Meinung nach, aber räumen wir doch mal etwas auf:
Code:
class Tamagotchi
{

    private int _hunger;
    private int _durst;
    private boolean _muede;
    
    /**
     * Ein neues Tamagotchi hat einen definierten Anfangszustand:
     * weder hungrig noch ueberfressen, nicht durstig und nicht muede.
     */
    public Tamagotchi()
    {
        _hunger = 0;
        _durst = 0;
        _muede = false;
    }

    // veraendernde Methoden

[I]Hier würden jetzt eigentlich Methoden stehen zur Änderung von _hunger, _durst, _muede[/I]

    //Sondierende Methoden
    
    /** Gibt an, ob das Tamagotchi ausgeglichen ist. Trifft zu, wenn es kein Hunger und keinen Durst hat und nicht müde ist. Treffen die Aussagen zu, ist es nicht ausgeglichen.
     * 
     */
    public boolean istAusgeglichen()
    {
        return !(_hunger > 0 && _durst > 0 && _muede == true);
    }
    
    
    /** Gibt an, ob das Tamagotchi fröhlich ist. Trifft zu, wenn es nicht müde ist, es etwas gesättigt ist (Wert unter -5), und es kaum Durst hat (Wert unter 4)
     * 
     */
    public boolean istFroehlich()
    {
        return (_muede == false && _hunger < -5 && _durst < 4);
    }
    
    
    /** Gibt an, ob das Tamagotchi gereizt ist. Trifft zu, wenn es Hunger hat und der Hunger doppelt so hoch ist, wie sein Durstwert.
     * 
     */
    public boolean istGereizt()
    {
        return (_hunger > 0 && 2*_hunger == _durst);
    }
    
    /**Ist erfüllt, wenn die anderen 3 Methoden false sind
    *
    */
    public boolean istGelangweilt()
    {
        return (!istAusgeglichen() && !istFroehlich() && !istGereizt());
    }

}
Jetzt könnte man folgende Optimierung versuchen:

_hunger
!istAusgeglichen() ==> _hunger > 0
!istFroehlich() ==> _hunger >= -5
!istGereizt() <==> _hunger <= 0 || 2 * _hunger != _durst
_hunger > 0 && 2 * _hunger != _durst

_durst
!istAusgeglichen() ==> _durst > 0
!istFroehlich() ==> _durst >= 4
!istGereizt() ist schon erledigt.
_durst >= 4

_muede
!istAusgeglichen() ==> _muede == true
!istFroehlich() ==> _muede == true
!istGereizt() ist schon erledigt, wie gesagt.
_muede == true

Insgesamt:
istGelangweilt() ==
_hunger > 0 && _durst >= 4 && 2 * _hunger != _durst && _muede == true​