Hallo,
als neues Mitglied hier im Forum möchte ich erstmal alle recht herzlich begrüßen!
Jedenfalls sitze ich seit mehreren Stunden schon an einer Aufgabe, in der es darum geht, ein Programm zu schreiben, das einige Dinge mit Brüchen anstellt. Ich habe alles so gut es ging geschrieben, jedoch scheint einiges schief gelaufen zu sein. Erstmal meckert der Compiler wegen des Overrides rum, und wenn dieses nicht da ist, gibt das Programm leider nur fehlerhafte Werte aus.
Ich würde mich freuen, wenn ihr mal drüberschauen könntet und mir Hinweise gebt, wie ich das Programm verbessern kann.
als neues Mitglied hier im Forum möchte ich erstmal alle recht herzlich begrüßen!
Jedenfalls sitze ich seit mehreren Stunden schon an einer Aufgabe, in der es darum geht, ein Programm zu schreiben, das einige Dinge mit Brüchen anstellt. Ich habe alles so gut es ging geschrieben, jedoch scheint einiges schief gelaufen zu sein. Erstmal meckert der Compiler wegen des Overrides rum, und wenn dieses nicht da ist, gibt das Programm leider nur fehlerhafte Werte aus.
Ich würde mich freuen, wenn ihr mal drüberschauen könntet und mir Hinweise gebt, wie ich das Programm verbessern kann.
Java:
/**
* Eine Klasse zur Repraesentierung von Bruchzahlen.
*/
public class Fraction {
/* Je ein streng gekapseltes Attribut fuer den ganzzahligen Zaehler und Nenner. */
private int numerator;
private int denominator;
/**
* Vollstaendig parametrisierter Konstruktor der Zaehler und Nenner
* uebergeben bekommt und die entsprechenden Attribute setzt.
* Negative Vorzeichen (Zahlen kleiner als Null) duerfen nur im Zaehler
* auftreten, die Uebergabe eines negativen Nenners ist zulaessig und
* wird mathematisch korrekt behandelt.
* Wird eine Null als Nenner uebergeben, so wird das entsprechende Attribut
* auf Eins gesetzt.
*/
public Fraction(int pNumerator, int pDenominator) {
if(pDenominator<0){
numerator = -pNumerator;
denominator = -pDenominator;
}
if(pDenominator == 0){
denominator = 1;
}
}
/**
* Gibt den Nenner zurueck.
*/
public int getDenominator() {
return denominator;
}
/**
* Gibt den Zaehler zurueck.
*/
public int getNumerator() {
return numerator;
}
/**
* Gibt den Bruch als Gleitkommazahl zurueck.
*/
@Override
public double toDouble(int numerator, int denominator) {
double fraction = numerator / denominator;
return fraction;
}
/**
* Ueberschreibt die toString-Methode und gibt einen String im Format
* "Zaehler/Nenner = Kommazahl" zurueck.
*/
public String toString(double fraction) {
String kommazahl = Double.toString(fraction);
return numerator + "/" + denominator + " = " + kommazahl;
}
/**
* Gibt den groessten gemeinsamen Teiler (Greatest Common Divider) zurueck.
*/
public static int GCD(int x, int y) {
if (y == 0) {
return x;
}
return GCD(y, x % y);
}
/**
* Gibt das kleinste gemeinsame Vielfache (Lowest Common Multiple) zurueck.
*/
public static int LCM(int x, int y) {
return (x * y) / GCD(x, y);
}
/**
* Kuerzt (vereinfacht) den Bruch.
*/
public void cancel() {
int factorC = GCD(numerator, denominator);
numerator = numerator/factorC;
denominator = denominator/factorC;
}
/**
* Erweitert, macht gleichnamig, addiert den uebergebenen Bruch und kuerzt.
*/
public void add(Fraction f) {
numerator = numerator * f.denominator + f.numerator * denominator;
denominator = denominator * f.denominator;
cancel();
}
/**
* Multipliziert den uebergebenen Bruch und kuerzt.
*/
public void multiply(Fraction f) {
numerator = numerator * f.numerator;
denominator = denominator * f.denominator;
cancel();
}
/**
* Bildet den Kehrwert und kuerzt, wenn der Zaehler ungleich Null ist.
* Stellt dabei sicher, dass negative Vorzeichen nur im Zaehler auftreten.
*/
public void reciprocal() {
if(denominator<0){
numerator = -numerator;
denominator = -denominator;
}
if(denominator != 0){
int newNumerator = numerator;
int newDenominator = denominator;
numerator = newDenominator;
denominator = newNumerator;
cancel();
}
}
/**
* Dividiert den uebergebenen Bruch
* (unter Verwendung von Kehrwert und Multiplikation).
*/
public void divide(Fraction f) {
numerator = numerator * f.denominator;
denominator = denominator * f.numerator;
cancel();
}
/**
* Deklariert und initialisiert zwei Ganzzahlen:
* "numerator" und "denominator" mit den Werten 1 und -7.
* Deklariert und initialisiert zwei Gleitkommazahlen:
* "floatNumber" und "floatResult" mit dem Quotienten aus
* "numerator" und "denominator" (dem Ergebnis der Gleitkommarechnung).
* Erzeugt zwei Objekte vom Typ "Fraction":
* "fractionNumber" und "fractionResult" mit "numerator" als Zaehler und
* "denominator" als Nenner.
* Addiert "Betrag von denominator -1" Mal "floatNumber" zu "floatResult"
* und genauso oft "fractionNumber" zu "fractionResult".
* Gibt mit verstaendlicher Beschreibung "floatResult" und "fractionResult"
* aus.
* Bildet den Kehrwert von "fractionNumber" und fuehrt dann die Division
* "fractionResult/fractionNumber" aus.
* Gibt mit verstaendlicher Beschreibung "fractionNumber"
* und "fractionResult" aus.
*/
public static void main(String[] args) {
int numerator = 1;
int denominator = -7;
float floatNumber = numerator / denominator;
float floatResult = numerator / denominator;
Fraction fractionNumber = new Fraction(numerator, denominator);
Fraction fractionResult = new Fraction(numerator, denominator);
floatResult += floatNumber * (denominator-1);
fractionResult.numerator = (denominator-1)*fractionNumber.numerator;
fractionResult = new Fraction(fractionResult.numerator, denominator);
System.out.println("Der Bruch als Kommazahl ist: "+floatResult);
System.out.println("Der Bruch ist: "+fractionResult.toString());
fractionNumber.reciprocal();
fractionResult.divide(fractionNumber);
System.out.println("Der Bruch als Kommazahl ist: "+fractionNumber.toString());
System.out.println("Der Bruch ist: "+fractionResult.toString());
/**
* To be filled
*/
}
}