Java (Eclipse) - Ergebnisrückgabe funktioniert nicht

barca_best_club

Cadet 2nd Year
Registriert
Aug. 2018
Beiträge
19
Guten Tag!
Auf meinem Weg durch das Java-Universum bin ich mittlerweile bei Klassen und Objekten in Eclipse und konkret Methoden mit Ergebnisrückgabe angekommen. Dabei kommt es aber, wie man unten sieht, beim Ausführen der Methode signum nicht zur gewünschten Anzeige einer Zahl, stattdessen wird - keine Ahnung was genau das ist - angezeigt. Ich füge mal nur die Teile der Übung ein, die wirklich zu der Signum Methode gehören bzw. wichtig zum Verständnis sind. (1. "Code" zeigt, was das Ergebnis ist - es geht mir um das "uebung05.Bruch@11028347", stattdessen sollte eigentlich entsprechend der Signum Anweisung 1 ausgegeben werden., 2. Code ist der Code zum Experimentieren mit der Klasse, 3. Code die Definition der Klasse, )
Java:
1/5 = 0.2uebung05.Bruch@11028347
[CODE=java]package uebung05;

public class Bruchtest1 {

    public static void main(String[] args) {
    Bruch b = new Bruch();
    b.zaehler = 4;
    b.nenner = 12;
    b.setze(1, 5);
    System.out.println();
    b.ausgeben();
    System.out.print(" = ");
    System.out.print (b.dezimalwert());
    
b.signum();
System.out.println(b);
    }

    }

Java:
package uebung05;

public class Bruch {
    int zaehler;
    int nenner;
    
    
    void setze(int z, int n) {
    zaehler = z;
    nenner = n;
    }
    
    double dezimalwert() {
    return (double) zaehler/nenner;
    
    }
    int signum() {
    if (this.dezimalwert() == 0)  {
        return 0;
    }
    if (this.dezimalwert() > 0) {
        return 1;
    }
    return -1;
    }
    }
    
    
    Warum wird die 1 nicht ausgegeben?
 
debuggen sollte helfen

b.signum();
System.out.println(b);

-> System.out.println(b.signum());
 
WIe der Vorredner schon geschrieben hat, vergleiche mal die Verwendung von dezimalwert und signum. Und wenn du ausgaben wie "uebung05.Bruch@11028347" bekommst, dann fehlt dir halt was in der Klasse. sonst wird einfach deine Klasse und der hashCode als hexString ausgegeben.
 
barca_best_club schrieb:
Bruch b = new Bruch());
...
System.out.println(b);
Um es mit einer Abwandlung eines berühmten Zitats zu sagen: toString() or not toString()
Implizit: class@hash
Explizit: whatever you want...

barca_best_club schrieb:
double dezimalwert()
if (this.dezimalwert() == 0)
Pass auf, wenn du Fließkommazahlen vergleichst. Da kommt nicht zwingend das raus was man erwartet, weil float bzw double gerundet werden. Durch Rundungsfehler lassen sich floats bzw doubles daher nicht zuverlässig vergleichen. Beispiel gefällig?

Code:
void testitbaby()
{
   double d = 0.3;
   d -= 0.1;
   d -= 0.1;
   d -= 0.1;

   if (d == 0)
   {
      System.out.println ("yo baby") ;
   }
   else
   {
      System.out.println ("oh no!") ;
   }
}
Auf den ersten Blick mag das eindeutig sein, d muss ja ==0 sein. Blöd is nur, dass d tatsächlich um 2,77E-17 abweicht, der Rundungsfehler.

In deinem Fall müsste dezimalwert() zwar tatsächlich ==0 sein, wenn zaehler==0, aber das Beispiel zeigt, dass man mit dem Feuer spielt, wenn man das so macht.
 
Das stimmt. Ich wollte damit nur darauf hinaus was an dieser Stelle passiert,und woher die unerwartete Ausgabe kommt.
 
Zurück
Oben