Bruch erstellen - Von Int zu Double Ergebnis

Edward

Mitglied
Hallo ich schreibe grade eine Klasse Bruch mit der man mit Brüchen arbeiten soll.
Bisher hab ich folgendes Coding:
Code:
public class Bruch {

   private int zaehler;
   private int nenner;

   public Bruch(int pZaehler, int pNenner) {

       this.zaehler = pZaehler;
       this.nenner = pNenner;

   }

   public double wert() {

       double ergebnis;

       ergebnis = zaehler/nenner;

       return ergebnis;

   }

   public void kehrwert() {

       int z = this.zaehler;
       int n = this.nenner;

       this.zaehler = n;
       this.nenner = z;

   }

}

Wenn ich nun einen Bruch erzeuge

Code:
Bruch b1 = new Bruch (2,3);

und die Methode folgende Methode anwende bekomme ich als Ergebnis 0.0 in der Konsole:

system.out.println(b1.wert());

Warum? Was hab ich falsch gemacht?
 

Robat

Top Contributor
Weil 2/3 eine Integerdivsion ist bei der das Ergebnis grundsätzlich abgerundet wird. 2 / 3 = 0,6666.. = (abgerundet) 0.
Um ein richtiges Ergebnis zu bekommen musst du entweder Nenner, Zähler oder beide zu einer Gleitkommazahl casten.

Als kleines Beispiel:
Java:
int nr1 = 2;
int nr2 = 3;

double erg = nr1 / (double) nr3;
 

Edward

Mitglied
Weil 2/3 eine Integerdivsion ist bei der das Ergebnis grundsätzlich abgerundet wird. 2 / 3 = 0,6666.. = (abgerundet) 0.
Um ein richtiges Ergebnis zu bekommen musst du entweder Nenner, Zähler oder beide zu einer Gleitkommazahl casten.

Als kleines Beispiel:
Java:
int nr1 = 2;
int nr2 = 3;

double erg = nr1 / (double) nr3;
Danke für die Antwort! Warum hat es nicht gereicht das
Code:
ergebnis
als double zu deklarieren?
Und noch eine Sache: Könntest du mir zeigen wie man eine Exception schreibt für den Fall das man eine Division durch 0 macht?
 

Robat

Top Contributor
Naja weil im Prinzip folgendes passiert:
double = (double) (int / int). Wie du siehst steht in der letzten Klammer eine Integerdivision. Und die kann zu double gecastet werden oder nicht. 0 bleibt 0.

Fehlerbehandlung mit Exceptions würde ich dir nicht empfehlen, da es fehlerbehaftet und langsam ist.
Prüf lieber vorher ob dein Nenner == 0 ist.
Also in der Art:
Java:
if(nenner == 0) {
     // Ausgabe eines Fehlers
}

Wenn du es unbedingt mit einer Exception machen wollen würdest könntest du es so machen:
Java:
try{
    // berechne
} catch(ArithmeticException e){
   // Fehlerausgabe
}
 

mrBrown

Super-Moderator
Mitarbeiter
Fehlerbehandlung mit Exceptions würde ich dir nicht empfehlen, da es fehlerbehaftet und langsam ist.
Prüf lieber vorher ob dein Nenner == 0 ist.
Also in der Art:
Java:
if(nenner == 0) {
     // Ausgabe eines Fehlers
}
Und wie sähe die Ausgabe eine Fehlers aus, wenn nicht mit Exceptions? ;)
 

Robat

Top Contributor
Und die Methode gibt dann 0 zurück und das Programm rechnet dann fleißig mit 0 weiter und der Nutzer merkt nichts, weil er auf die GUI und nicht die Konsole achtet? ;)
Bin jetzt einfach mal davon ausgegangen, dass es sich nicht um eine GUI handelt. Wenn es sich doch um eine GUI handelt sollte man den Benutzer natürlich mit einer Fehlermeldung via Dialog o.ä. aufmerksam machen ;)
 

mrBrown

Super-Moderator
Mitarbeiter
Noch nie was von Exceptions sollten nicht den Programmfluss steuern gehört????
Eben, deshalb sag ich ja, durch 0 teilen ist auf Ebene des Bruchs ein Fehler des Programierers (=Exception) und kein Programmfluss mehr.

Oder gehört es für dich zu einem Bruch dazu, dass man durch 0 teilt?
Und wenn Ja: wie sieht denn die korrekte Reaktion auf 1/0 aus, wenn man keine Exceptions benutzt?
 
X

Xyz1

Gast
Ich stelle einfach mal folgendes in den Raum, vielleicht lerne ich ewas dabei!
Java:
class Bruch {

    public static void main(String[] args) {
        Bruch b1 = new Bruch(500, 55);
        System.out.println("b1 = " + b1);
        System.out.println("b1 = " + b1.kuerzen());
        System.out.println("b1 = " + b1.kuerzen());
        System.out.println("b1 = " + b1.div(5));
        System.out.println("b1 = " + b1.kuerzen());
        System.out.println("b1 = " + b1.kuerzen());
        System.out.println("b1 = " + b1.div(0));
    }

    long z;
    long n;

    Bruch(long z, long n) {
        this.z = z;
        this.n = n;
    }

    long ggT_old() {
        if (z == 0) {
            return n;
        }
        long a = z;
        long b = n;
        while (b != 0) {
            if (a > b) {
                a -= b;
            } else {
                b -= a;
            }
        }
        return a;
    }

    Bruch kuerzen() {
        long ggt = ggT_old();
        if (ggt != 0) {
            z /= ggt;
            n /= ggt;
        }
        return this;
    }

    Bruch div(long l) {
        if (l == 0) {
            return null;
        }
        z /= l;
        return this;
    }

    @Override
    public String toString() {
        return "( " + z + " / " + n + " )";
    }

}

Hier geht es mir einmal nicht um Geschwindigkeit, sondern um Rückgabewerte und so ewas.
 

mrBrown

Super-Moderator
Mitarbeiter
Die Klasse hat so einige Probleme...

Java:
Bruch b = new Bruch(1,5)
assert b.equals(b.div(2));
assert b.equals(new Bruch(0,0)); //Wenn equals korrekt implementiert wäre...
 

Edward

Mitglied
Naja weil im Prinzip folgendes passiert:
double = (double) (int / int). Wie du siehst steht in der letzten Klammer eine Integerdivision. Und die kann zu double gecastet werden oder nicht. 0 bleibt 0.

Fehlerbehandlung mit Exceptions würde ich dir nicht empfehlen, da es fehlerbehaftet und langsam ist.
Prüf lieber vorher ob dein Nenner == 0 ist.
Also in der Art:
Java:
if(nenner == 0) {
     // Ausgabe eines Fehlers
}

Wenn du es unbedingt mit einer Exception machen wollen würdest könntest du es so machen:
Java:
try{
    // berechne
} catch(ArithmeticException e){
   // Fehlerausgabe
}

Ja stimmt das ergibt Sinn mit dem double Danke!
Wegen Exceptions: Es geht tatsächlich nur darum das mal gemacht zu haben. Lerne grad die Grundlagen :)
Und eine Division durch 0 bei Brüchen abzufangen schien mir als einfaches Beispiel mit Try Catch Final usw. zu arbeiten :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Bruch Klasse erstellen Java Basics - Anfänger-Themen 4
Schmaxel Herausfinden ob ein Bruch kürzbar ist. Java Basics - Anfänger-Themen 6
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
J Dezimalzahl in Bruch Umwandeln und Kürzen Java Basics - Anfänger-Themen 8
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
W Variablen float rundet beim Bruch rechnen Java Basics - Anfänger-Themen 3
Z Erste Schritte Instanzmethoden Rechnen (Bruch) Java Basics - Anfänger-Themen 18
K Datentypen double x als Bruch aus Integern macht x zu integer? Java Basics - Anfänger-Themen 3
Binary.Coder Bruch in Textarea Java Basics - Anfänger-Themen 5
H Bruch Konstruktor Java Basics - Anfänger-Themen 15
L Bruch rechnen Java Basics - Anfänger-Themen 29
N Bruch Java Basics - Anfänger-Themen 15
I Bruch Konstruktor Java Basics - Anfänger-Themen 4
G Richtige Syntax für Bruch Java Basics - Anfänger-Themen 12
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
X Bruch Problem (int/double) Java Basics - Anfänger-Themen 3
G bruch soweit es geht kürzen Java Basics - Anfänger-Themen 12
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J Packages erstellen Java Basics - Anfänger-Themen 7
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
Ostkreuz Spielfeld Schatz erstellen Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
B Klasse statisch erstellen da n-mal geladen Java Basics - Anfänger-Themen 3
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
A Passwort erstellen Java Basics - Anfänger-Themen 3
S CVS erstellen Java Basics - Anfänger-Themen 1
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
dennis_lnz Klassen Wie kann ich mein Java Textadventure verbessern, um ein Klassendiagramm zu erstellen? Java Basics - Anfänger-Themen 9
dcHost Java Kara Sensor erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
frager2345 Programm erstellen ohne Autoboxing und Unboxing Java Basics - Anfänger-Themen 13
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
B Teilprofil erstellen Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S Programm erstellen Java Basics - Anfänger-Themen 3
S MinMax Programm erstellen Java Basics - Anfänger-Themen 4
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
T Countdown erstellen Java Basics - Anfänger-Themen 7
I ZIP File erstellen Java Basics - Anfänger-Themen 10
L Ordner in neuen erstellten Ordner erstellen Java Basics - Anfänger-Themen 12
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Zurück Button erstellen Java Basics - Anfänger-Themen 1
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
E Classpath Datai erstellen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
L FinanzApp erstellen Java Basics - Anfänger-Themen 1
J Junit4 Klasse erstellen Java Basics - Anfänger-Themen 5
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
JaVaN0oB Bruchklasse erstellen Java Basics - Anfänger-Themen 9
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
K Rahmen erstellen mit mehrdimensionalem Array Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
K Objektdiagramm erstellen Java Basics - Anfänger-Themen 3
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
E Filmsammlung erstellen Java Basics - Anfänger-Themen 6
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
N String N-Gramme mit Stream erstellen Java Basics - Anfänger-Themen 7
K Quersumme erstellen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben