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.
Das funktioniert ja nur, wenn die Attribute nicht als private deklariert wurden.Java:sum.zaehler = commonA.zaehler + commonB.zaehler; sum.nenner = common;
Jepp. Genauwir befinden uns ja in der Fraction-Klasse
Also mir zeigt es einen Fehler an,wenn ich den Konstruktor parameterlos lasse.Ach so, du hast Probleme meine Lösung mit deiner zu vergleichen weil die auch noch einen parameterlosen Konstruktor hat ??
In dem parameterlosen Konstruktor musst du dann die Attribute (zähler, nenner einfach auf 0 setzen.Also mir zeigt es einen Fehler an,wenn ich den Konstruktor parameterlos lasse.
public String toString() {
String buffer = zaehler + "/" + nenner;
return buffer;
}
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);
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);
}
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 ;
}
}
*/
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();
Zeig mal deine mainBei mir gibt es keine Ausgabe bzw. es heißt, es wird ausgeführt(endlos).
Ja, weil du immer 2/3 und 3/4 addierst. Du verwendest ja die eingabe gar nicht ...Egal was ich eingebe.
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);
Schau dir noch mal die Anzahl der Semikolons an...Fraction Produkt = this.zähler / this.nenner; * b.zähler/b.nenner;
Diese Zeile ist völlig falsch. Wie erstellst du denn wenn du zaehler und nenner hast daraus ein neues Fraction-Objekt ?Fraction Produkt = this.zähler / this.nenner; * b.zähler/b.nenner;
Du solltest dir vielleicht nochmal genau anschauen, was komplexe Datentypen sind und wie man sie verwendet.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.
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 ??),Ich glaube, ich schaffe die Aufgabe rechtzeitig nicht mehr
Wann musst du es denn abgeben?Ich glaube, ich schaffe die Aufgabe rechtzeitig nicht mehr.
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;
}
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);
Hier ist auch noch ein Fehler drin, oder?Nein. Du gibst b als Parameter mit, also brauchst du kein commonB neu erzeugen. Und commonA auch nicht, dafür benutzt du this.
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;
}
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;
}
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;
}
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);
Nein hat er nicht.Hast du dann alle Methoden?
Nein, es fehlen noch drei.Kleine Anmerkung, du hast "die" Produkt geschriebenund es ist Konvention, zur Lesbarkeit vor und nach dem Plus ein Leerzeichen zu machen.
Hast du dann alle Methoden?
Nun ja, die Aufgabe sagt umrechnen in einen reduzierten Bruch, also kuerzen() und dazu brauchst du intern den ggT
Wie geht die ?public double umrechnen()
So?Wie geht die ?
Edit: ein Tip, es ist ein Einzeiler
public double umrechnenFließkommaZahl(Fraction b) {
double umrechnung = this.zähler / this.nenner;
return umrechnung;
}
Fast. Du musst bedenken dass zähler und nenner Integers sind und die Integerdivision 3/5 ergibt 0 !
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;
}
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
Wie mache ich das zweite?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