Java - Methode in if Anweisung funktioniert nicht

  • Hallo , folgende Frage . Wieso kann die Methode in der if clause nicht funktionieren und wie behebe ich dieses Problem . Danke im Voraus



    public class Tier {


    String Art;
    String Name;
    int Alter;
    double Gewicht;
    boolean reinrassig;
    boolean Wohnung;
    boolean Lebensmittellieferung;





    Tier(String art_neu,String name_neu,int alter_neu,double gewicht_neu)


    {
    Art= art_neu;
    Name= name_neu;
    Alter= alter_neu;
    Gewicht= gewicht_neu;
    if(Art=="Katze")
    {
    WohnungPrüfen();
    }


    }
    public void WohnungPrüfen(boolean Wohnung_neu) {
    Wohnung = Wohnung_neu;
    }


    }

  • Bei zukünftigen Fragen bitte die code-tags verwenden, danke!


    kurzum, weil

    Code
    1. ==

    die Identität überprüft, d.h. schaut, ob Art und "Katze" dasselbe Objekt (im Speicher) referenzieren.


    Was du in Wahrheit tun willst, ist auf Gleichheit/Equality zu prüfen und das geht in Java mithilfe der

    Code
    1. equals

    methode, die auf String natürlich bereits implementiert ist.


    Um eine potenzielle NPE (Nullpointerexception) zu verhindern, würde ich dir überdies raten, den Vergleich dann umzudrehen.


    Übrigens, siehe auch:


    https://stackoverflow.com/ques…hy-doesn-t-work-on-string
    https://stackoverflow.com/ques…ntity-and-equality-in-oop

    “Fantasy is hardly an escape from reality. It's a way of understanding it.” - Lloyd Alexander


    “The more I see of what you call civilization, the more highly I think of what you call savagery!” - Robert E. Howard, King Kull

    "Kapitalismus heißt: Man kauft Dinge die man nicht braucht, von Geld, das man nicht hat, um Menschen zu beeindrucken, die man nicht leiden kann." - Volker Pispers

  • Aber dadurch funktioniert die Methode immer noch nicht , zeigt mir nämlich noch einen Fehler bei der Methode auf . Ich will ja , wenn die Art gleich der Katze ist , dann soll noch ein neues Attribut hinzugefügt werden , ob diese Katze in der Wohnung sich aufhält oder nicht . Hoffe man konnte verstehen auf was ich hinaus will . Und danke schon mal .


    :)

  • Wenn ich den Parameter "boolean Wohnung_neu" einfüge , funktioniert es immer noch nicht . Wenn ich nur den Parameter "Wohnung" hinzufüge , zeigt es keine Fehler auf aber wenn ich ein neues Objekt von Tier erstelle und als Art "Katze" benutze , wird die Methode trotzdem nicht ausgeführt .

  • Ich tu mir schwer, nachzuvollziehen, wie dein Code jetzt aussieht. Bitte poste allen Code, den du hast; auch den, in dem du die Klasse Tier verwendest. Bitte verwende CODE-Tags, wie von Vendredi angesprochen.


    Und dann bitte ich um eine genaue Beschreibung, was (nicht) passiert:


    • "Funktioniert nicht", wenn du einen Compilerfehler hast, ist nicht ausreichend. Welcher Compilerfehler? Wo?
    • Du hast keinen Compilerfehler, aber der Code tut nicht das, was er soll? Was sollte der Code tun? Was tut er stattdessen?
  • <public class Tier {


    String Art;
    String Name;
    int Alter;
    double Gewicht;
    boolean reinrassig;
    boolean Wohnung;
    boolean Lebensmittellieferung;


    Tier(String art_neu,String name_neu,int alter_neu,double gewicht_neu)


    {
    Art= art_neu;
    Name= name_neu;
    Alter= alter_neu;
    Gewicht= gewicht_neu;
    if(Art=="Katze")
    {
    WohnungPrüfen();
    }


    }
    public void WohnungPrüfen(boolean Wohnung_neu) {
    Wohnung = Wohnung_neu;
    }


    }>
    Dieser Code funktioniert nicht , den ich kriege folgenden Fehler : "method WohnungPrüfen in class cant be applied to give types ; required: boolean , found: no arguments ,reason:actual and formal argument lists differ in length"


    Und was ich eigentlich programmieren wollte ist , dass wenn ich ich ein neues Objekt ( in meinem Fall das Tier) erstelle , erstmal Art , Name usw. eingebe (dies funkt. alles ) . Meine Bedingung ist aber , falls die Art eine "Katze" ist , dann soll noch zusätzlich geprüft werden , ob diese Katze in der Wohnung lebt oder nicht . Aber wie ich das probiert habe zu programmieren , funkt. das nicht . Und meine Frage war , was muss ich ändern , damit das funktioniert .

  • Du hast also genau keinen der oben stehenden Ratschläge beherzigt.


    Post #2 von Vendredi: String-Vergleiche mit == funktionieren nicht, du musst equals() verwenden.


    Post #4 von mtoman: WohnungPruefen() braucht einen boolean-Parameter. Probiere einfach mal WohnungPruefen(true) oder WohnungPruefen(false).


    Und wenn das dann mal funktioniert, kannst du deinen Code auch an die Java Coding Guidelines anpassen: Klassennamen beginnen mit einem großen Buchstaben, Methoden- und Variablennamen allerdings mit einem kleinen Buchstaben.

  • Post #2 von Vendredi: String-Vergleiche mit == funktionieren nicht, du musst equals() verwenden.
    - Das ist ein andere Schreibweise , meine
    funktioniert genauso mit "=="
    Post #4 von mtoman: WohnungPruefen() braucht einen boolean-Parameter. Probiere einfach mal WohnungPruefen(true) oder WohnungPruefen(false).
    -Damit würde es gehen aber ich will ja individuell entscheiden ob es in der Wohnung lebt oder nicht , jede Katze ist ja anders . Auf das will ich ja hinaus. Und "
    wohnungprüfen(boolean Wohnung_neu);" geht ja nicht , deswegen weiß ich nicht , wie ich das Probleme lösen kann. Aber danke schon mal :)

  • Post #2 von Vendredi: String-Vergleiche mit == funktionieren nicht, du musst equals() verwenden.
    - Das ist ein andere Schreibweise , meine
    funktioniert genauso mit "=="


    Sie kompiliert, wird aber nicht das tun, was du moechtest (zumindest nicht mit dem Code, den du gepostet und der Erklaerung die du gegeben hast).
    Die Details habe ich bereits erklaert. Wenn das nicht reicht, dann einfach die Links durchschmoekern.

    Post #4 von mtoman: WohnungPruefen() braucht einen boolean-Parameter. Probiere einfach mal WohnungPruefen(true) oder WohnungPruefen(false).
    -Damit würde es gehen aber ich will ja individuell entscheiden ob es in der Wohnung lebt oder nicht , jede Katze ist ja anders . Auf das will ich ja hinaus. Und "
    wohnungprüfen(boolean Wohnung_neu);" geht ja nicht , deswegen weiß ich nicht , wie ich das Probleme lösen kann. Aber danke schon mal :)


    Die Signatur der Methode "WohnungPrüfen" sieht so aus

    Code
    1. [COLOR=#000000][FONT=Verdana]public void WohnungPrüfen(boolean Wohnung_neu)[/FONT][/COLOR]


    D.h. diese Methode erwartet sich einen boolean parameter. Diesen setzt du aber nicht, du gibst im Methodenaufruf

    Code
    1. [COLOR=#000000][FONT=Verdana]WohnungPrüfen(); [/FONT][/COLOR]

    keinen parameter (also void) mit. Deshalb schreit der compiler auch mit der von dir genannten Fehlermeldung.[/FONT][/COLOR]

    “Fantasy is hardly an escape from reality. It's a way of understanding it.” - Lloyd Alexander


    “The more I see of what you call civilization, the more highly I think of what you call savagery!” - Robert E. Howard, King Kull

    "Kapitalismus heißt: Man kauft Dinge die man nicht braucht, von Geld, das man nicht hat, um Menschen zu beeindrucken, die man nicht leiden kann." - Volker Pispers