OOP Brüche nicht richtig berechnen

morry329

Mitglied
Hallo, ich habe den folgende Code, um arithmetische Operation durchzuführen. Die Berechnungen sind falsch außer addition:

Java:
9/7
1/5
addition:
52/35 //passt
subtraction:
8855/6125 //sollte 38/35 sein
multiply:
61985/1071875 //sollte 9/35 sein
divide:
1549625/42875 //sollte 45/7 sein

Ich habe eine Stunde gekämpft, aber ich bin nicht weitergekommen. Vielleicht kann jemand mir eine Hilfsstellung geben? Hier ist den Code

Java:
package F;

public class FractionTypVorlesung {
    int numer;
    int denom;

    public FractionTypVorlesung(int n, int d){
        numer = n;
        denom = d;
        //reduce();
    }

    public void reduce(int numer, int denom){
        int GCD = gcd(numer, denom);
        numer /= GCD;
        denom /= GCD;
    }

    public void add (FractionTypVorlesung other){
        numer *= other.denom;
        other.numer *= denom;
        denom *= other.denom;
        other.denom *= denom;
        numer+= other.numer;
        reduce(numer, denom);
        System.out.println(numer + "/" + denom);
    }

    public void sub(FractionTypVorlesung other) {

        int newNumer = this.numer * other.denom - other.numer * this.denom;
        int newDenom = this.denom * other.denom;
        reduce(newNumer, newDenom);
        System.out.println(newNumer + "/" + newDenom);
    }

    public void multiply(FractionTypVorlesung other) {
        int newNumer = this.numer * other.numer;
        int newDenom = this.denom * other.denom;
        reduce(newNumer, newDenom);
        System.out.println(newNumer + "/" + newDenom);
    }

    public void div(FractionTypVorlesung other) {
        int newNumer = this.numer * other.denom;
        int newDenom = this.denom * other.numer;
        reduce(newNumer, newDenom);
        System.out.println(newNumer + "/" + newDenom);
    }

    public int gcd(int a, int b){
         if(b==0){
             return a;
         }
         return gcd(b, a%b);
    }

    public String toString(){
        return Integer.toString(numer) + "/" + Integer.toString(denom);
    }

    public static void main(String[] args) {
        FractionTypVorlesung a = new FractionTypVorlesung(9,7);
        FractionTypVorlesung b = new FractionTypVorlesung(1, 5);

        System.out.println(a.toString());
        System.out.println(b.toString());
        System.out.println("addition: ");
         a.add(b);
        System.out.println("subtraction: ");
        a.sub(b);
        System.out.println("multiply: ");
        a.multiply(b);
        System.out.println("divide: ");
        a.div(b);

    }
}
 

Robert Zenz

Top Contributor
Java:
    public void reduce(int numer, int denom){
        int GCD = gcd(numer, denom);
        numer /= GCD;
        denom /= GCD;
    }

Also, du rechnest Dinge, dann rechnest du das nochmal und weist das Ergebnis dann der Variable numer zu. Wo ist numer definiert? In welchem Scope ist numer definiert?

Dein nicht ganz so konkretes Problem ist dass du sehr viel mischt was deine Zustaende angeht. Manchmal sind es Parameter, manchmal Instanzvariablen. Du solltest dich versuchen auf eines zu einigen, entweder du verwendest den aktuellen Zustand der Klasse, oder zu uebergibt den Zustand welcher gebraucht wird.
 

KonradN

Super-Moderator
Mitarbeiter
Das, was @Robert Zenz geschrieben hat noch einmal in ganz klaren Worten:

a) Bei reduce kommen zwei wichtige Aspekte zum tragen:
Zum einen werden die Instanzvariablen durch die Parameter versteckt. Du rechnest also nur auf den Parametern
Zum Anderen sind Parameter Call by Value, d.h. es wird bei einem Aufruf von reduce nur der Wert der Variablen übergeben. Die Variablen vom Aufruf selbst ändern sich also nicht, wenn die Parameter geändert werden!

b) Es ist ganz wichtig, dass Du Dir genau überlegst, was die einzelnen Methoden machen sollen:
  • Sollen sie was berechnen? Wenn ja: Was genau? Was soll sich ändern?
  • Sollen sie etwas ausgeben?

Jede Method macht einfach irgendwas. add / sub ändern die Instanzen wild. Also beide! Sowohl die, auf der die Methode aufgerufen wurde aber auch den Parameter. multiply und div ändern keine Instanz sondern berechnen nur etwas in lokalen Variablen um dann etwas auszugeben. Dazu kann ich nur die absoluten basics anmerken:

1. Überlege Dir genau, was jede Methode machen soll! Was genau erwartest Du? Das musst Du ordentlich in Worte fassen! Bei add könnte es z.B. sein, dass du bei a.add(b) haben willst, dass b zu a addiert wurde. Dann ist in a das Ergebnis und b ist unverändert. Das sollte dann aber auch ebenso bei den anderen Methoden sein. reduce hätte dann keine Parameter und würde die Instanz selbst kürzen.
(Hier der Hinweis: Es ist bei so APIs üblich oder sehr oft zu finden, dass keine Instanz verändert wird. a.add(b) würde also weder a noch b verändern sondern einfach nur einen neuen Bruch zurück geben.)

2. Schreibe es am Besten wirklich auf! Du kannst also z.B. als erstes einen JavaDoc Kommentar schreiben, ehe Du die Methode schreibst! Dann kann man Dir auch am ehesten helfen, weil wir im Code sehen, was Du überhaupt machen willst. Das ist so bei dem Code derzeit schlicht nicht möglich.
 

berndoa

Top Contributor
Ich sehe, wie ja auch größtenteils shcon gesagt wurde, Probleme:
1. deine add Methode würde ich mal genauso aufbauen wie die sub() methode.
Aktuell ist sie unübersichtlich und es mahct mehr sinn , für den neuen numerator und denominator eigene variabeln zu definieren.
womit wir zu 2. kommen:
wie offensichtlich durch die definition mittels
Java:
 int newNumer =...
ist die Variable newNumer und die zum FractionTypVorlesung Objekt gehörende numer Variable NICHT dasselbe!

Du müsstest dann natürlich auch numer mit dem in newNumer berehcneten Wert auch überschrieben.
FGleiches für denominator.


Was jetzt eher optional ist aber du auch prüfen solltest:
Dass Alles auch bei negativen Werten klappt.
Sowohl bezüglich der +-*/ Operationen als auch bzgl der gcd methode.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
thefastandcurious Brüche kürzen Java Basics - Anfänger-Themen 70
L Brüche in java Java Basics - Anfänger-Themen 7
Kirby.exe Brüche kürzen Java Basics - Anfänger-Themen 12
G OOP- Brüche addieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
S Zahlenformat für unendliche Brüche? Java Basics - Anfänger-Themen 7
J Brüche kürzen Java Basics - Anfänger-Themen 11
Eileen Brüche addieren in Zwei Klassen mit JOptionPane Java Basics - Anfänger-Themen 4
B Brüche kürzen Java Basics - Anfänger-Themen 7
S [HILFE] Brüche addieren, multiplizieren, kürzen Java Basics - Anfänger-Themen 17
kb interface / Brüche in java übergeben Java Basics - Anfänger-Themen 3
S Brüche, Fließkommazahlen Java Basics - Anfänger-Themen 3
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben