Methoden if Bedingung trotz Erfüllung, nicht angesprochen

lollipol27

Mitglied
Hallo Leute,
Erstmal der Code um den es geht (ist alles ein bisschen unnötig verkompliziert, weil es ne Hausaufgabe ist):
Code:
public static Nat gt(Nat x, Nat y){
        Nat z = Nat.succ(Nat.zero());
        if ( x == Nat.zero()){ 
            return Nat.zero();
        }if (y == Nat.zero()){
            return z;
        }else{
            return gt(Nat.sub(x, z),Nat.sub(y, z));
        }
    }
       
    public static Nat gcd(Nat x, Nat y){
           
        if (x == y){
            return y;
           
        }else{
           
            if (gt(x,y) == Nat.succ(Nat.zero())){

                return gcd(Nat.sub(x, y),y);
            }else{

                return gcd(Nat.sub(y, x),x);
            }
        }   
    }

Methode gt bekommt zwei Variablen und soll von beiden die mit größerem Wert herausfinden. (eine größer als Methode).
Methode gcd soll den größten gemeinsamen Teiler errechnen.
Zum Verständnis:
Nat.zero() = 0
Nat.succ(Nat.zero()) = Der Nachfolger von der 0, also die 1
Nat.sub(x,y) = Zieht von Wert x den Wert y ab
Nat.add(x,y) = Addiert zu x den Wert y

Wo liegt jetzt das Problem: In der Methode gcd wird meine if-Bedingung nach dem else (also folgendes: if (gt(x,y) == Nat.succ(Nat.zero())) ) nie erfüllt, obwohl das eigentlich meiner Meinung nicht sein kann. Habe mir alles mal ausgeben lassen und es müsste dort nach gegebenen Rekursionschritten eigentlich die Bedingung erfüllt sein, aber sie wird trotzdem übersprungen.

Hoffe ihr könnt mir weiterhelfen!

Liebe Grüße
 

f10

Aktives Mitglied
gt gibt ein Nat zurück. Das ist ein Objekt. Objekte kann man nicht mit == vergleichen, da du so Referenzen vergleichst, die sind natürlich unterschiedlich. Darum ergibt es auch kein true. Objekte vergleicht man mit der equals()-Methode. Wie der Vergleich aussehen soll, kannst du entscheiden, indem du in Nat die equals-Methode überschreibst, sollte das nicht schon passiert sein.

Java:
(gt(x,y).equals(Nat.succ(Nat.zero())))

Edit: Was ist der Rückgabewert von Nat.succ()? Wenn das ein int ist, in dem Fall also die 1, dann vergleich doch eher so:

if (Nat.gt(x,y).getValue() == Nat.succ(Nat.zero())

Jedenfalls müssen die beiden Werte, die du mit == vergleichst vom selben primitiven Datentyp sein, damit der Vergleich auch Sinn macht.
 
Zuletzt bearbeitet:

f10

Aktives Mitglied
Kleines Beispiel:

Java:
public class Auto {
    private int baujahr;
    private String marke;

    public Auto(int baujahr, String marke) {
        setBaujahr(baujahr);
        setMarke(marke);
    }

    public int getBaujahr() {
        return baujahr;
    }

    public void setBaujahr(int baujahr) {
        this.baujahr = baujahr;
    }

    public String getMarke() {
        return marke;
    }

    public void setMarke(String marke) {
        this.marke = marke;
    }

    @Override
    public boolean equals(Object o) {
        Auto a = (Auto) o;
        return this.getBaujahr() == a.getBaujahr() && this.getMarke().equals(a.getMarke());
    }

    @Override
    public String toString() {
        return this.getMarke() + " (" + this.getBaujahr() + ")";
    }

}

Erstelle ich jetzt zwei Autos mit gleichen Baujahr und Namen, dann liefert mir die equals-Methode true zurück. Ist aber nur eine fixe Implementierung mit Verbesserungsbedarf.

weitere Infos gibt es zum Beispiel hier: Angelika Langer
 

lollipol27

Mitglied
Hmm oke und ich glaube jetzt habe ich ein Problem. Ich darf nur ne maximale Anzahl an Methoden verwenden und eine zusätzliche equals() Methode würde das Ganze jetzt sprengen..
Ich glaube ich werde mir einen anderen Weg überlegen müssen den größten gemeinsamen Teiler auszurechnen, bei dem ich keine Werte vergleichen muss
 

f10

Aktives Mitglied
Hmm oke und ich glaube jetzt habe ich ein Problem. Ich darf nur ne maximale Anzahl an Methoden verwenden und eine zusätzliche equals() Methode würde das Ganze jetzt sprengen..
Ich glaube ich werde mir einen anderen Weg überlegen müssen den größten gemeinsamen Teiler auszurechnen, bei dem ich keine Werte vergleichen muss

Inwiefern darfst du nur eine maximale Anzahl an Methoden verwenden?

Die equals-Methode ist eine besondere Methode, die erbt jede Klasse automatisch von Object. Wenn du Klassen vergleichbar machen willst, musst du die equals-Methode überschreiben. Benötigst du die Klasse auch innerhalb von speziellen Collections wie HashMap z.B. musst du zusätzlich auch hashCode() überschreiben. Möchtest du z.B. mit System.out.println() deine Klasse ordentlich auf der Konsole ausgeben, musst du die toString() Methode überschreiben. All diese Methoden hat jede Klasse, da sie sie von Object erbt.
 

lollipol27

Mitglied
Mein Dozent schreibt halt immer bestimmte JUnit TestCases dafür. Wenn ich jetzt noch ne zusätzliche Methode implementiere, laufen diese Tests nicht mehr durch.
 

lollipol27

Mitglied
Danke dir noch fuer deine Zeit und deine Hilfe @f10. Hab letzten Endes noch eine andere Variante gefunden das gewollte zu berechnen, aber du hast mir sehr weiter geholfen! (Auch zum Verstaendnis mit dem Ueberschreiben und der equals-Methode)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
Lion.King if-Bedingung Java Basics - Anfänger-Themen 3
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
A Dividieren mit Bedingung? Java Basics - Anfänger-Themen 7
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
Dimax Collections groupingBy mit Bedingung Java Basics - Anfänger-Themen 11
H Frage zur if-Bedingung bzw switch case Java Basics - Anfänger-Themen 6
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
Hanschyo If Bedingung Fehler Java Basics - Anfänger-Themen 7
T Komischer Fehler mit einer if-Bedingung Java Basics - Anfänger-Themen 3
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
E if-Bedingung mit mehreren Möglichkeiten ? Java Basics - Anfänger-Themen 6
S DefaultTableCellRenderer mit Bedingung Java Basics - Anfänger-Themen 1
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
Z Verschachtelte If-Bedingung Java Basics - Anfänger-Themen 6
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
P Compiler-Fehler if Bedingung fehlerhaft Java Basics - Anfänger-Themen 7
X Schleife bis "Bedingung" ausführen Java Basics - Anfänger-Themen 13
TheMenox Verschachtelte If Bedingung Java Basics - Anfänger-Themen 4
M Erste Schritte if-Bedingung schlägt fehl Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
Ocram Variablen Vereinfachung einer Bedingung Java Basics - Anfänger-Themen 18
J Can't find symbol - Erstellung eines Objekts in if-Bedingung Java Basics - Anfänger-Themen 3
M Frage zu if-Bedingung Java Basics - Anfänger-Themen 1
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
J Wo liegt nur an dieser einfachen Bedingung mein Fehler? Java Basics - Anfänger-Themen 8
R for-Schleife bei erfüllter Bedingung beenden Java Basics - Anfänger-Themen 7
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
S if bedingung - Stunde und Minute vergleichen Java Basics - Anfänger-Themen 5
K If-Bedingung mit Wertzuweisung Java Basics - Anfänger-Themen 2
J Vererbung If-Bedingung im Konstruktor Java Basics - Anfänger-Themen 15
J Arrays prüfen und über if Bedingung ausgeben Java Basics - Anfänger-Themen 15
T if Bedingung Java Basics - Anfänger-Themen 16
MiMa for Schleife Bedingung Java Basics - Anfänger-Themen 4
M in jTable schreiben unter Bedingung Java Basics - Anfänger-Themen 3
J Erste Schritte Kurze Frage zu Listenern und If-Bedingung Java Basics - Anfänger-Themen 2
N Verifikation einer if-Bedingung Java Basics - Anfänger-Themen 9
P Variablen ArrayList mit Bedingung iterieren Java Basics - Anfänger-Themen 2
E if(Bedingung) Java Basics - Anfänger-Themen 9
L Erste Schritte Sollte ich hier lieber Cases verwenden oder wäre eine If-Bedingung besser? Java Basics - Anfänger-Themen 6
Anfänger2011 Wie bricht man alles ab wenn eine Bedingung nicht erfüllt ist? Java Basics - Anfänger-Themen 21
P Variablen Variable in if Bedingung anlegen, Wert zuweisen und diesen als Bedingung nutzen Java Basics - Anfänger-Themen 4
M Und Bedingung Java Basics - Anfänger-Themen 17
N Bedingung für Datentypen Java Basics - Anfänger-Themen 3
E if-Bedingung funktioniert nicht Java Basics - Anfänger-Themen 9
W Funktionsaufruf nach Bedingung Java Basics - Anfänger-Themen 3
S for schleife mit if bedingung Java Basics - Anfänger-Themen 21
S return(Bedingung) ? [mehrere Befehle] Java Basics - Anfänger-Themen 5
2 Bedingung bei Schleife Java Basics - Anfänger-Themen 23
E Methode in der Bedingung Java Basics - Anfänger-Themen 11
E if Bedingung Java Basics - Anfänger-Themen 4
H Sortierung eines String[][] mit Bedingung Java Basics - Anfänger-Themen 7
H Bedingung while-Schleife | integer number too large Java Basics - Anfänger-Themen 2
J Gibt es eine möglichkeit ähnlich wie .equals(bedingung1 ||bedingung ..n) ? Java Basics - Anfänger-Themen 5
I Potenzmenge mit Bedingung Java Basics - Anfänger-Themen 24
S If-Bedingung Java Basics - Anfänger-Themen 15
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
K Fragen zu If-Bedingung Java Basics - Anfänger-Themen 3
S bedingung in variable speichern? Java Basics - Anfänger-Themen 8
neurox Ergebnis der if-Bedingung weiter verwenden Java Basics - Anfänger-Themen 5
G If-Schleife läuft ohne erfüllte Bedingung Java Basics - Anfänger-Themen 13
K Logik in if-Bedingung Java Basics - Anfänger-Themen 2
S if anweisung wird ausgeführt egal ob bedingung true o. false Java Basics - Anfänger-Themen 2
S For Schleife, Bedingung Java Basics - Anfänger-Themen 4
S Wildcard-Bedingung Java Basics - Anfänger-Themen 10
G Probleme mit break hier; in if-Bedingung Java Basics - Anfänger-Themen 5
M Schleife abhängig von Bedingung Java Basics - Anfänger-Themen 5
G while Bedingung? Java Basics - Anfänger-Themen 6
L Bedingung immer false, auch wenn zwei Strings gleich sind Java Basics - Anfänger-Themen 11
L IF Bedingung in SELECT Statement? Java Basics - Anfänger-Themen 3
M Kleine Frage zu If-Bedingung Java Basics - Anfänger-Themen 4
Bierhumpen String Bedingung. Java Basics - Anfänger-Themen 8
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3
R Klassen nach Bedingung laden Java Basics - Anfänger-Themen 22
G Compiler sieht die Bedingung nicht! Java Basics - Anfänger-Themen 5
W if Bedingung mit "Außer" Java Basics - Anfänger-Themen 4
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
U Breite von Textfeldern trotz Layoutmanager Java Basics - Anfänger-Themen 4
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
tun3d Packet trotz richtiger Addressierung nicht auffindbar? Java Basics - Anfänger-Themen 10
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
P NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap trotz vorhandener Klasse? Java Basics - Anfänger-Themen 10
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J bundel - Datei wird nicht gefunden. Trotz STRG-SHIFT-J Java Basics - Anfänger-Themen 2
U UnsupportedClassVersionError trotz neuster JRE und JDK Version Java Basics - Anfänger-Themen 7
J Unterschiedliche Ordnerstrukturen trotz gleicher Entwicklungsumgebungen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben