B
Bisasam12345
Gast
Hallo mein Problem ist folgendermaßen - siehe Quellcode
Das hier ist meine Hauptklasse, genannt "Application"
und das hier ist meine Unterklasse "Rational":
es kommt folgendes raus:
warum werden meine brüche nicht gekürzt? beim Mulitplizieren hab ich doch extra die Methode reduceRational(); eingefügt
und wie bekomme ich die brücher hinter den Doppelpunkten weg? die sollen da gar nicht hin aber stehn doppelt da...
ich versteh das nicht kann mir da einer helfen?
wäre wirklich nett, mfg !
Das hier ist meine Hauptklasse, genannt "Application"
Java:
public class Application {
public static void processRationalNumbers(Rational r1, Rational r2) {
// Addieren r2 - r1
System.out.print("Addiere r2 zu r1: ");
r1.addRational(r2);
r1.printCommentedRational();
// Subtrahieren r2 - r1
System.out.print("Subtrahiere r2 von r1: ");
r1.subtractRational(r2);
r1.printCommentedRational();
// Multiplizieren r1 mit r2
System.out.print("Multipliziere r1 mit r2: ");
r1.multRational(r2);
r1.printCommentedRational();
r1.reduceRational();
// Dividieren r1 durch r2
System.out.print("Dividiere r1 durch r2: ");
r1.divideRational(r2);
r1.printCommentedRational();
System.out.println();
}
public static void main(String[] args) {
// Bruch anlegen
System.out.print("Lege Bruch r1 an: ");
Rational r1 = new Rational(3, 4);
r1.printCommentedRational();
// Zweiter Bruch anlegen
System.out.print("Lege Bruch r2 an: ");
Rational r2 = new Rational(5, 6);
r2.printCommentedRational();
System.out.println();
processRationalNumbers(r1, r2);
// Modifizieren von r1
System.out.print("Nenner von r1 sei -4: ");
r1.setDenom(-4);
r1.printCommentedRational();
System.out.println();
processRationalNumbers(r1, r2);
// Modifizieren von r2
System.out.print("Zähler von r2 sei 0: ");
r2.setNum(0);
r2.printCommentedRational();
System.out.println();
processRationalNumbers(r1, r2);
}
}
und das hier ist meine Unterklasse "Rational":
Java:
public class Rational {
// Attribute der Klasse (Zähler und Nenner)
private int num;
private int denom = 1;
// Konstruktor
public Rational(int n, int d)
{
num = n;
denom = d;
}
// Zugriffsmethoden
public int getNum()
{
return num;
}
public void setNum(int n)
{
num = n;
}
public int getDenom()
{
return denom;
}
public void setDenom(int d)
{
if (d == 0)
{
System.out.println(" Nenner darf nicht 0 werden; initialisiert mit 1 ");
denom = 1;
}
else if (d < 0)
{
denom = -d;
num = -num;
}
else
{
denom = d;
}
}
public void printRational()
{
System.out.print(num + "/" + denom);
}
public void printCommentedRational()
{
System.out.print(" Das Ergebnis hat den Wert ");
printRational();
System.out.println();
}
public void reduceRational()
{
// Kürzen
int ggT = Math.abs(calculateGreatestCommonDivisor(num, denom));
setNum(num / ggT);
setDenom(denom / ggT);
}
public void expandRational(int a)
{
if (a == 0)
{
System.out.println (" Ist der Faktor 0, kann nicht erweitert werden! ");
}
else
{
a = Math.abs(a);
setNum(num * a);
// factor positiv --> Zugriff möglich
setDenom(denom * a);
}
}
public Rational invertRational()
{
// Bruch mit Kehrwert multiplizieren
if (denom == 0)
{
System.out.println(" Keiner der beiden Brüche darf als Nenner 0 enthalten! ");
return null;
}
else
return new Rational (num, denom);
}
public void addRational(Rational b)
{
// kgV für Rational b und bestehende Rationale Zahl
int lcm = calculateLowestCommonMultiple(this.denom, b.denom);
// Brüche auf Nenner = kgV erweitern.
this.expandRational(lcm / denom);
b.expandRational(lcm/b.denom);
// Zähler addieren
setNum(this.num + b.num);
setDenom(lcm);
// Kürzen
this.reduceRational();
b.reduceRational();
}
public void subtractRational(Rational c)
{
//kgV für Rational c und bestehende Rationale Zahl
int lcm = calculateLowestCommonMultiple(this.denom, c.denom);
//Brüche auf Nenner = kgV erweitern.
this.expandRational(lcm / denom);
c.expandRational(lcm / c.denom);
// Zähler subtrahieren
setNum(this.num - c.num);
setDenom(lcm);
//Kürzen
this.reduceRational();
c.reduceRational();
}
public void multRational (Rational r)
{
// Bruch wird mit anderem Bruch multipliziert
setNum (num * r.num);
setDenom(denom * r.denom);
printRational();
}
public void divideRational(Rational s)
{
// Dividiert rationale Zahl durch Parameter (rationale Zahl)
Rational inverse = s.invertRational();
if (inverse == null)
{
System.out.print(" 0 ist keine gültige Zahl! ");
}
else
{
multRational(inverse);
}
}
// Hilfsmethoden ggT + kgV
private int calculateGreatestCommonDivisor(int m, int n)
{
if (n == 0)
{
return m;
}
else
{
return calculateGreatestCommonDivisor( n, m % n);
}
}
private int calculateLowestCommonMultiple(int m, int n)
{
return Math.abs(m * n) / calculateGreatestCommonDivisor(m, n);
}
}
es kommt folgendes raus:
Java:
Lege Bruch r1 an: Das Ergebnis hat den Wert 3/4
Lege Bruch r2 an: Das Ergebnis hat den Wert 5/6
Addiere r2 zu r1: Das Ergebnis hat den Wert 19/12
Subtrahiere r2 von r1: Das Ergebnis hat den Wert 3/4
Multipliziere r1 mit r2: 15/24 Das Ergebnis hat den Wert 15/24
Dividiere r1 durch r2: 25/48 Das Ergebnis hat den Wert 25/48
Nenner von r1 sei -4: Das Ergebnis hat den Wert -25/4
Addiere r2 zu r1: Das Ergebnis hat den Wert -65/12
Subtrahiere r2 von r1: Das Ergebnis hat den Wert -25/4
Multipliziere r1 mit r2: -125/24 Das Ergebnis hat den Wert -125/24
Dividiere r1 durch r2: -625/144 Das Ergebnis hat den Wert -625/144
Zähler von r2 sei 0: Das Ergebnis hat den Wert 0/6
Addiere r2 zu r1: Das Ergebnis hat den Wert -625/144
Subtrahiere r2 von r1: Das Ergebnis hat den Wert -625/144
Multipliziere r1 mit r2: 0/144 Das Ergebnis hat den Wert 0/144
Dividiere r1 durch r2: 0/1 Das Ergebnis hat den Wert 0/1
warum werden meine brüche nicht gekürzt? beim Mulitplizieren hab ich doch extra die Methode reduceRational(); eingefügt
und wie bekomme ich die brücher hinter den Doppelpunkten weg? die sollen da gar nicht hin aber stehn doppelt da...
ich versteh das nicht kann mir da einer helfen?
wäre wirklich nett, mfg !