So ich gebe 2 Brüche ein und lasse diese Addieren/Subtrahieren. Ausgegeben werden soll eine rationale Zahl. Hab damit nur ein Problem, wenn der erste Bruch kleiner ist als der zweite spinnt meine Subtraktion und ich erhalte kein Ergebnis.
Code
public class Rational {
private double zaehler;
private double nenner;
// Konstruktor
void rational(double z, double n) {
zaehler = z;
nenner = n;
}
// Addition
public Rational addition(Rational bruch2) {
Rational ergebnis = new Rational();
ergebnis.zaehler = zaehler * bruch2.nenner + bruch2.zaehler * nenner;
ergebnis.nenner = nenner * bruch2.nenner;
return ergebnis.kuerzen();
}
// Subtraktion
public Rational subtraktion(Rational bruch2) {
Rational ergebnis = new Rational();
ergebnis.zaehler = zaehler * bruch2.nenner - bruch2.zaehler * nenner;
ergebnis.nenner = nenner * bruch2.nenner;
return ergebnis.kuerzen();
}
// Ausgabe
public String toString() {
String Ausgabe = new String();
Ausgabe = zaehler + "/" + nenner;
return Ausgabe;
}
// Kürzen
private Rational kuerzen() {
double iGrößer, iKleiner, iErgebnis = 0;
boolean bStart = true;
Rational ergebniss = new Rational();
iGrößer = (nenner < zaehler ? zaehler : nenner);
if (iGrößer == nenner) {
iKleiner = zaehler;
} else {
iKleiner = nenner;
}
while (iErgebnis != iKleiner) {
if (!bStart) {
if (iKleiner < iErgebnis) {
iGrößer = iErgebnis;
} else {
iGrößer = iKleiner;
iKleiner = iErgebnis;
}
} else {
bStart = false;
}
iErgebnis = iGrößer - iKleiner;
}
ergebniss.zaehler = zaehler / iErgebnis;
ergebniss.nenner = nenner / iErgebnis;
return ergebniss;
}
public static void main(String[] args) {
Rational bruch1 = new Rational();
Rational bruch2 = new Rational();
bruch1.rational(14, 3);
bruch2.rational(4, 5);
System.out.println("Ergebnis der Addition beträgt: "
+ bruch1.addition(bruch2));
System.out.println("Ergebnis der Subtraktion beträgt: "
+ bruch1.subtraktion(bruch2));
}
}
Alles anzeigen
Ich denke mal das liegt daran das ein negatives Ergebnis nicht ausgegeben werden kann. Wie kann ich das am leichtesten beheben?