Methoden implementieren, Sichtbarkeiten, Brüche

SchwarzWeiß

Bekanntes Mitglied
Nein, du kannst Fraction nicht einfach eine Zahl zuweisen. Du musst eine neue Instanz von Fraction erzeugen, das geschieht in dem du den Konstruktor aufrufst, dem du Zähler und Nenner mitgeben musst.
 

SchwarzWeiß

Bekanntes Mitglied
Java:
sum.zaehler = commonA.zaehler + commonB.zaehler;
sum.nenner = common;
Das funktioniert ja nur, wenn die Attribute nicht als private deklariert wurden.

EDIT: Fehler meinerseits, es funktioniert doch, wir befinden uns ja in der Fraction-Klasse. Dann brauchst du um die Lösung von JStein52 zu übernehmen noch einen parameterlosen Konstruktor.
 
Zuletzt bearbeitet:

OPMajor

Aktives Mitglied
Ach so, du hast Probleme meine Lösung mit deiner zu vergleichen weil die auch noch einen parameterlosen Konstruktor hat ??
Also mir zeigt es einen Fehler an,wenn ich den Konstruktor parameterlos lasse.

Und wie kann ich testen(kompilieren), um zu sehen, ob die Methode jetzt das macht, was verlangt wird?
Mit System.out.println(sum)? Wenn ja, wo müsste ich das einfügen?
 

JStein52

Top Contributor
Also mir zeigt es einen Fehler an,wenn ich den Konstruktor parameterlos lasse.
In dem parameterlosen Konstruktor musst du dann die Attribute (zähler, nenner einfach auf 0 setzen.
Und testen kannst du es am besten indem du deiner Klasse noch eine toString() - Methode gibst die ewta so aussieht:
Code:
    public String toString() {
        String buffer = zaehler + "/" + nenner;
        return buffer;
    }
dann kannst du in deiner main-Methode schreiben:
Code:
Fraction bruch1 = new Fraction(2,3);  // 2/3
Fraction bruch2 = new Fraction(3,4);  // 3/4
Fraction summe = bruch1.addieren(bruch2);
System.out.println("Die Summe ergibt "+summe);

Edit: damit keine Missverständnisse entstehen: den Konstruktor mit den beiden Parametern brauchst du schon auch noch
 

JStein52

Top Contributor
Übrigens, um noch mal auf deinen Lösungsversuch einzugehen: du kannst schon auch einfach über Kreuz mit den beiden Nennern multiplizieren und dann die Zähler addieren. Dann aber richtig:
Code:
    public Fraction addiere(Fraction b) {
           int num1 = (this.zaehler * b.nenner) + (b.zaehler * this.nenner);
           int num2 = this.nenner * b.nenner;
           return new Fraction(num1, num2);
    }
Und das Ergebnis ist dann richtig aber in der Schule lernt man ja den Hauptnenner als kleinstes gemeinsames Vielfaches von Nenner1 und Nenner2 zu bilden.
 

OPMajor

Aktives Mitglied
Bei mir gibt es keine Ausgabe bzw. es heißt, es wird ausgeführt(endlos).
Java:
public class Fraction {
    private int zähler =0;
     private int nenner = 0;
    
     public String toString() {
         String buffer = zähler + "/" + nenner;
         return buffer;
     }
 
     public Fraction(int zähler, int nenner){
      
        this.zähler = zähler;
        this.nenner = nenner;
     }
    
public Fraction addiere(Fraction b) {
    // Hauptnenner bilden
    int common = hauptNenner(this.nenner, b.nenner);
    // zwei neue Brüche anlegen die dann passend erweitert werden
    Fraction commonA = new Fraction(0,0);
    Fraction commonB = new Fraction(0,0);
    commonA = erweitern(common);
    commonB = b.erweitern(common);
    // neuen Bruch anlegen fuer das Ergebnis
    Fraction sum = new Fraction(0,0);
    // berechne die Summe
    sum.zähler = commonA.zähler + commonB.zähler;
    sum.nenner = common;
    // hier könnte man jetzt noch kuerzen

    return sum;
}
private int hauptNenner(int nenner1, int nenner2) {
    int factor = nenner1;
    while ((nenner1 % nenner2) != 0) {
        nenner1 += factor;
    }
    return nenner1;
}
private Fraction erweitern(int common) {
    Fraction result = new Fraction(1,2);
    int factor = common / this.nenner;
    result.zähler = this.zähler * factor;
    result.nenner = common;
    return result;
}
              
    public double multiplizieren(double zähler,double nenner) {
      
         double anderezahl1 =2;
         double ergebnis1 = zähler/nenner*anderezahl1;
       return ergebnis1;
    }
        
     public  double umrechnenFließkommaZahl(){
       double ergebnis1=zähler/nenner;
       return ergebnis1;
    }
  
    public  double kehrwertbilden() {
       double ergebnis3=nenner/zähler;
  
      
   return ergebnis3;
    }

}  

  
    /**double umrechnen() {
       return ;
   }
   }
  
  
*/
Java:
import java.util.Scanner;

public class A {
    public static void main(String[] args) { 
      
      
           Fraction f=new Fraction(1,2);
           @SuppressWarnings("resource")
           Scanner eingabe= new Scanner (System.in);
            eingabe.nextInt();
            eingabe.nextInt();
          
          
            f.addiere(f);
            Fraction bruch1 = new Fraction(2,3);  // 2/3
            Fraction bruch2 = new Fraction(3,4);  // 3/4
            Fraction summe = bruch1.addiere(bruch2);
            System.out.println("Die Summe ergibt "+summe);
            f.multiplizieren(0, 0);
            f.umrechnenFließkommaZahl();
            f.kehrwertbilden();
           // f.umrechnen();
 

JStein52

Top Contributor
Code:
           Scanner eingabe= new Scanner (System.in);
            int zaehler1 = eingabe.nextInt();
            int nenner1 = eingabe.nextInt();
            int zaehler2 = eingabe.nextInt();
            int nenner2 = eingabe.nextInt();

          
          
            f.addiere(f);
            Fraction bruch1 = new Fraction(zaehler1,nenner1);
            Fraction bruch2 = new Fraction(zaehler2,nenner2);
Wenn du es so änderst muss du 4 Zahlen eingeben und erhältst dann ein passendes Ergebnis
 

OPMajor

Aktives Mitglied
Danke, das habe ich jetzt gemacht.
Und wie mache ich das mit dem Multiplizieren?

Ich muss zugeben, dass ich die addiere-Methode noch nicht ganz nachvollziehen kann, wie und warum sie das macht, was sie macht.
 

JStein52

Top Contributor
Analog zu addieren. Die Methode hat den gleichen Parameter und den gleichen return-Typ (Fraction). Dann berechnest du darin den Zaehler und Nenner des Ergebnis-Bruchs, erstellst mit diesen Werten per new Fraction(neuerZaehler, neuerNenner) und returnst dieses Ergebnis.
 

JStein52

Top Contributor
Und zum Kürzen eines Bruches kommst du ja noch, damit kannst du jeweils die Ergebnisse von addieren und multiplizieren noch "nachbehandeln"
 

OPMajor

Aktives Mitglied
So?
Java:
 public Fraction multiplizieren(Fraction b) {
  
         Fraction Produkt =  this.zähler / this.nenner; * b.zähler/b.nenner;
       return Produkt;
    }
 

SchwarzWeiß

Bekanntes Mitglied
Das habe ich ja hier schon geschrieben
Nein, du kannst Fraction nicht einfach eine Zahl zuweisen. Du musst eine neue Instanz von Fraction erzeugen, das geschieht in dem du den Konstruktor aufrufst, dem du Zähler und Nenner mitgeben musst.
Du solltest dir vielleicht nochmal genau anschauen, was komplexe Datentypen sind und wie man sie verwendet.

Und in Java ist es Konvention, nur Klassen großzuschreiben, daher solltest du Produkt kleinschreiben.
 

JStein52

Top Contributor
Ich glaube, ich schaffe die Aufgabe rechtzeitig nicht mehr
Warum nicht ? Wo hast du das Problem ? Du hast ja die addieren(...) und genau analog machst du dir eine multiplizieren. Dann schreibst du dir auf wie du zwei Brüche multiplizierst (neuer Zähler ?? neuer Nenner ??),
dann schreibst du das "in Java" hin und erstellst mit diesem neuenZaehler und neuenNenner einen neuen Bruch, analog wie bei addieren !! Ist im Prinzip nix neues. Und diesen neuen Bruch return'st du. Und auch der Test in main geht genau analog zum addieren !
 

OPMajor

Aktives Mitglied
So?
Java:
    public Fraction multiplizieren(Fraction b) {                  
       Fraction commonA = new Fraction(0,0);
        Fraction commonB = new Fraction(0,0);
        Fraction produkt = new Fraction(0,0);
        produkt.zähler = commonA.zähler * commonB.zähler;
        produkt.nenner = commonA.nenner  * commonB.nenner;
 
       return produkt;
    }
Java:
      Fraction bruch1 = new Fraction(x,y);  // 2/3
            Fraction bruch2 = new Fraction(v,z);  // 3/4
            Fraction summe = bruch1.addiere(bruch2);
            System.out.println("Die Summe ergibt "+summe);
            Fraction bruch3 = new Fraction(x,y);  // 2/3
            Fraction bruch4 = new Fraction(v,z);  // 3/4
            Fraction produkt = bruch3.addiere(bruch4);
            System.out.println("Die Produkt ist "+pro);
 
Zuletzt bearbeitet:

OPMajor

Aktives Mitglied
Nein. Du gibst b als Parameter mit, also brauchst du kein commonB neu erzeugen. Und commonA auch nicht, dafür benutzt du this.
Hier ist auch noch ein Fehler drin, oder?
Java:
  public Fraction multiplizieren(Fraction b) {                   
    /*raction commonA = new Fraction(0,0);
        Fraction commonB = new Fraction(0,0);
 */     Fraction produkt = new Fraction(0,0);
        produkt.zähler = this.zähler *b.zähler;
        produkt.nenner = this.nenner     *      b.nenner;
 
       return produkt;
    }
 

JStein52

Top Contributor
So:
Code:
    public Fraction multipliziere(Fraction b) {
        // create new fraction to return as product
        Fraction produkt = new Fraction();
        // calculate product
        produkt.zaehler = zaehler * b.zaehler;
        produkt.nenner = nenner * b.nenner;
        return produkt;
    }

Edit: ok, bei dir heisst der Zähler "zähler" ansonsten passt es glaube ich
 

OPMajor

Aktives Mitglied
Jetzt geht es:
Java:
  public Fraction multiplizieren(Fraction b) {                   

     Fraction produkt = new Fraction(0,0);
        produkt.zähler = this.zähler *b.zähler;
        produkt.nenner = this.nenner * b.nenner;
 
       return produkt;
    }
Java:
 Fraction bruch1 = new Fraction(x,y);  // 2/3
            Fraction bruch2 = new Fraction(v,z);  // 3/4
            Fraction summe = bruch1.addiere(bruch2);
            System.out.println("Die Summe ergibt "+summe);
            Fraction bruch3 = new Fraction(x,y);  // 2/3
            Fraction bruch4 = new Fraction(v,z);  // 3/4
            Fraction pro = bruch3.multiplizieren(bruch4);
            System.out.println("Die Produkt ist "+pro);
 

SchwarzWeiß

Bekanntes Mitglied
Kleine Anmerkung, du hast "die" Produkt geschrieben ;) und es ist Konvention, zur Lesbarkeit vor und nach dem Plus ein Leerzeichen zu machen.

Hast du dann alle Methoden?
 

JStein52

Top Contributor
Das Zauberwort ist casten. Du musst dem Compiler bei der Division sagen dass es sich um double-Werte handeln soll die er dividiert.
Code:
public  double umrechnenFließkommaZahl() {
    double    umrechnung = (double)this.zähler / (double)this.nenner;  
   
       return umrechnung;
    }
 

JStein52

Top Contributor
und für die public Fraction kuerzen() solltest du dir zunächst mal eine
private int ggT(int a, int b)
machen die den grössten gemeinsamen Teiler zweier Zahlen berechnet.
Und in kuerzen rufst du dir dann zuächst mal die ggT auf mit zähler und nenner als Parameter.
Dann dividierst du Zähler und Nenner durch das Ergebnis des ggT und machst daraus wieder einen neuen Bruch den du return'st
 

OPMajor

Aktives Mitglied
Java:
 prublic Fraction kürzen() {
    Fraction c= new Fraction(0,0);
    ggT(int a, int b);
    c.zähler = this.zähler / a;
    c.nenner = this.nenner / a;
    return c;
 

JStein52

Top Contributor
Das hier ist eine Standard-ggT die du üerall im Netz findest:
Code:
    private int ggT(int a, int b) {
        while (a != 0 && b != 0) {
            a = a % b;
            if (a == 0) {
                return b;
            }
            b = b % a;
            if (b == 0) {
                return a;
            }
        }
        return 1;
    }

Ich habe deine ggT mal getestet, ich nehme an in r soll das Ergebnis stehen, da fehlte ein return ! Aber das Ergebnis der ggT ist bei dir falsch
 

SchwarzWeiß

Bekanntes Mitglied
1. du hast im Methodenkopf von ggT() als Rückgabewert int definiert, es wird jedoch kein int zurückgegeben
2. das Aufrufen von ggT() in kürzen() reicht nicht, du musst den Rückgabewert auch in einer Variable speichern
 

JStein52

Top Contributor
Und die kürzen ist auch falsch. Du musst die ggT mit zähler und nenner als Parameter aufrufen, und zwar mit dem Absolutwert derselben
 

OPMajor

Aktives Mitglied
Das hier ist eine Standard-ggT die du üerall im Netz findest:
Code:
    private int ggT(int a, int b) {
        while (a != 0 && b != 0) {
            a = a % b;
            if (a == 0) {
                return b;
            }
            b = b % a;
            if (b == 0) {
                return a;
            }
        }
        return 1;
    }

Ich habe deine ggT mal getestet, ich nehme an in r soll das Ergebnis stehen, da fehlte ein return ! Aber das Ergebnis der ggT ist bei dir falsch

r = Rest der ganzzahligen Division von a/b.

Aber mir ist es egal, welcher Algorithmus, solange es funktioniert ;)
 

JStein52

Top Contributor
kürzen:

Code:
public Fraction kürzen() {
    Fraction c= new Fraction(0,0);
    int ggt = ggT(Math.abs(zähler), Math.abs(nenner));
    c.zähler = this.zähler / ggt;
    c.nenner = this.nenner / ggt;
    return c;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
S Interface Implementieren von Methoden aus einer Klasse in eine GUI Java Basics - Anfänger-Themen 6
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
M Methoden implementieren? Java Basics - Anfänger-Themen 8
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
J Argumente in Methoden übergeben Java Basics - Anfänger-Themen 1
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
L Rekursive Methoden Java Basics - Anfänger-Themen 14
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W Methoden aufrufen - auch klassenübergreifend? Java Basics - Anfänger-Themen 9
Kotelettklopfer Methoden nicht aufrufbar Java Basics - Anfänger-Themen 34
R Schulaufgabe, Bruache Hilfe mit non-static Methoden Java Basics - Anfänger-Themen 2
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
H Kann man Methoden öfter aufrufen? Java Basics - Anfänger-Themen 2
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
Zeppi OOP Methoden mit einander Verknüpfen Java Basics - Anfänger-Themen 6
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
M Bräuchte Hilfe bei diesen Methoden Java Basics - Anfänger-Themen 4
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
Junger_Basileus Celsius -> Fahrenheit / Strukturierung in statischen Methoden Java Basics - Anfänger-Themen 7
J Verschachtelte Methoden Java Basics - Anfänger-Themen 9
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Generics Methoden Java Basics - Anfänger-Themen 7
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
S throws bei Methoden Java Basics - Anfänger-Themen 4
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
Kirby.exe Methoden Aufrufe Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
H Wie kann ich durch Methoden definiren? Java Basics - Anfänger-Themen 8
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P Verzweigungen und Methoden Java Basics - Anfänger-Themen 10
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
B Methoden Mehrere ähnliche Methoden zusammenfassen Java Basics - Anfänger-Themen 24
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Java Methoden "Parameter" Problem Java Basics - Anfänger-Themen 16
B Polymorphie Warum funktionieren polymorphe Referenzvariablen bei überschriebenen Methoden und bei nicht überschriebenen nicht? Java Basics - Anfänger-Themen 3
B Methoden Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Methoden richtig anwenden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben