Wie muss ich dieses Programm weiter anpassen?

Die Rechnung mit endlichen (Gleit-)Kommazahlen kann zu Ungenauigkeiten führen, es kann daher wünschenswert sein, ganzzahlige Brüche zu verwenden.

In dieser Aufgabe soll eine Objektklasse zur Repräsentation von und Rechnung mit Brüchen erzeugt werden.

Die Köpfe der geforderten Methoden sind bereits vorgegeben und dürfen nicht verändert werden. Die Methoden sollen entsprechend der Kommentare vervollständigt werden.

Achten sie darauf diese Methoden, wann immer möglich, zu verwenden und so Duplikationen zu vermeiden.

Alle Methoden deren Rückgabetyp Fraction ist, sollen ein neues Objekt erzeugen und zurückgeben und die zur Berechnung verwendeten Objekte unverändert lassen!

Die Java-Standardbibliotheken Math und Integer dürfen (müssen aber nicht) verwendet werden. Um eine Gleitkommazahl bei der Rechnung mit Ganzzahlen zu erhalten muss ggf. Typecasting verwendet werden!

Es stehen außerdem die folgenden zwei Methoden schon zur Verfügung:

public static int GCD(int x, int y): Gibt den größten gemeinsamen Teiler der beiden Argumente (Greatest Common Divider) zurück.

public static int LCM(int x, int y): Gibt das kleinste gemeinsame Vielfache der beiden Argumente (Lowest Common Multiple) zurück.

public class Fraction {

private int numerator, denominator;

/**

* Gibt den größten gemeinsamen Teiler der beiden Argumente (Greatest Common Divider) zurück.

*/

public static int GCD(int x, int y) {

if (y == 0) return x;

return GCD(y, x % y);

}

/**

* Gibt das kleinste gemeinsame Vielfache der beiden Argumente (Lowest Common Multiple) zurück.

*/

public static int LCM(int x, int y) {

return (x * y) / GCD(x, y);

}

//Beginn der Aufgabe

/**

* 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 (nicht im "denominator"-Attribut).

* Die Uebergabe eines negativen Nenners ("denominator"-Argument) an den Konstruktor ist jedoch zulaessig.

* Der Konstruktor muss also den uebergebenen Nenner pruefen und sein Vorzeichen so behandeln,

* dass der resultierende Bruch (die Attribute) die genannte Restriktion erfüllt

* und der Wert des Bruchs (die Argumente) unverändert bleibt

* (ein negatives Vorzeichen im Nenner muss also methematisch korrekt beseitigt werden).

* Wird eine Null als Nenner uebergeben, so wird das entsprechende Attribut

* auf Eins gesetzt.

* Jeder erzeugte Bruch wird gekuerzt (dazu soll die entsprechende Mehode s.u. verwendet werden).

*/

public Fraction(int numerator, int denominator) {

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.

*/

public double toDouble() {

double fraction = numerator / denominator;

return fraction;

}

/**

* Gibt einen String im Format

* "Zaehler/Nenner" zurueck.

*/

public String toString() {

double fraction = toDouble();

return numerator + "/" + denominator + " = " + fraction;

}

/**

* Kuerzt (vereinfacht) den Bruch.

*/

public void shorten() {

int factorC = GCD(numerator, denominator);

numerator = numerator/factorC;

denominator = denominator/factorC;

}

/**

* Erweitert (macht gleichnamig), addiert dann den uebergebenen Bruch.

*/

public Fraction add(Fraction f) {

numerator = numerator * f.denominator + f.numerator * denominator;

denominator = denominator * f.denominator;

cancel();

}

/**

* Multipliziert mit dem uebergebenen Bruch.

*/

public Fraction multiply(Fraction f) {

numerator = numerator * f.numerator;

denominator = denominator * f.denominator;

cancel();

}

/**

* Bildet den Kehrwert, wenn der Zaehler ungleich Null ist.

* Sonst wird der Bruch unveraendert zurueckgegeben.

*/

public Fraction reciprocal() {

}

/**

* Dividiert durch den uebergebenen Bruch

* (unter Verwendung von Kehrwert und Multiplikation).

*/

public Fraction divide(Fraction f) {

numerator = numerator * f.denominator;

denominator = denominator * f.numerator;

cancel();

}

}
Java, Bruch, Programmiersprache, kürzen, Gleitkommadarstellung
Ist dieses Programm so richtig korrigiert?

Hallo, ich habe hier ein Programm, das ich korrigieren muss, das hab ich auch schon gemacht, das Problem liegt aber darin, dass mein Compiler als Ausgabe, diesen Text hat, was an sich auch richtig ist.

"Fips ist jetzt 6

Zusammengerechnet sind unsere Haustiere jetzt 8 Jahre alt

Der Weissbauchigel ist 2 Jahre alt und heisst Freddy. Er wiegt 0.016 kg."

Allerdings zeigt der Compiler, wo ich den für die Abgabe der Hausaufgabe reinschreiben muss, einen anderen Text und zwar.

"Fips ist jetzt 6

Zusammengerechnet sind unsere Haustiere jetzt 8 Jahre alt

Der Chinchilla ist ein Sauegetier und ist6 Jahre alt, heisst Fips. Sie wiegt 2.4 kg.

Der Weissbauchigel ist 2 Jahre alt und heißt Freddy. Er wiegt 0.016 kg."

Das heißt, dass was kursiv fett makiert ist, gehört da nicht hin. Weiß da einer warum ich 2 verschiedene Texte rausbekomme?

Den korrigierten Code findet ihr ganz unten!

Ich hoffe jemand kann mir helfen und bedanke mich im Voraus!

Momentan kompiliert dieses Programm nicht.

Ihre Aufgabe ist es eine neue Java Klasse zu schrieben, sodass die HaustierVerwaltung.java ohne Fehler läuft. 

Schreiben Sie dafür in das Antwortfeld eine passende neue Java Klasse. 

Hinweis: 

  • Die Klasse HaustierVerwaltung darf nicht verändert werden und nicht in das Antwortfeld geschrieben werden.

Hier ist der Inhalt der HaustierVerwaltung.java:

public class HaustierVerwaltung {
    public static void main(String[] args) {
        // deklariere zwei Variablen vom Typ Haustier
        Haustier chinchilla;
  	Haustier weissbauchigel;
        
        // erzeuge zwei Objekte der Klasse Haustier
        chinchilla = new Haustier("Fips", 5);
  	weissbauchigel = new Haustier("Freddy", 2);
  
        
        // weise einigen Attributen der zwei Objekte Werte zu
  	weissbauchigel.gewicht = 0.016;
  	chinchilla.gewicht = 2.4;
        
        // chinchilla wird ein Jahr aelter
        chinchilla.geburtstag();
  	System.out.println(chinchilla.name+" ist jetzt "+chinchilla.alter);
        System.out.println("Zusammengerechnet sind unsere Haustiere jetzt "+Haustier.alterGesamt+" Jahre alt");
        // Ausgabe der Attributwerte der Objekte
  	if(chinchilla.istSaeugetier){
   		System.out.println("Der Chinchilla ist ein Sauegetier und ist"+chinchilla.alter+" Jahre alt, heisst "+chinchilla.name+". Sie wiegt " + chinchilla.gewicht + " kg.");
  	}
        System.out.println("Der Weissbauchigel ist "+weissbauchigel.alter+" Jahre alt und heisst "+weissbauchigel.name+". Er wiegt " + weissbauchigel.gewicht + " kg.");
    }
}

Korrogierter Code:

public class Haustier {
  String name;
  int alter;
  double gewicht;
  boolean istSaeugetier;
  static int alterGesamt = 0;

  public Haustier(String name, int alter) {
    this.name = name;
    this.alter = alter;
    this.istSaeugetier = true;
    this.gewicht = 0.0;
    alterGesamt += alter;
  }

  public void geburtstag() {
    this.alter++;
    alterGesamt++;
  }

  public static void main(String[] args) {
    Haustier chinchilla;
    Haustier weissbauchigel;

    chinchilla = new Haustier("Fips", 5);
    weissbauchigel = new Haustier("Freddy", 2);

    weissbauchigel.gewicht = 0.016;
    chinchilla.gewicht = 2.4;

    chinchilla.geburtstag();
    System.out.println(chinchilla.name + " ist jetzt " + chinchilla.alter);
    System.out.println("Zusammengerechnet sind unsere Haustiere jetzt " + Haustier.alterGesamt + " Jahre alt");
    // Kommentiere die Zeilen aus, die den Chinchilla beschreiben
    /*
    if (chinchilla.istSaeugetier) {
      System.out.println("Der Chinchilla ist ein Säugetier und ist " + chinchilla.alter + " Jahre alt, heißt " + chinchilla.name + ". Er wiegt " + chinchilla.gewicht + " kg.");
    }
    */
    System.out.println("Der Weissbauchigel ist " + weissbauchigel.alter + " Jahre alt und heißt " + weissbauchigel.name + ". Er wiegt " + weissbauchigel.gewicht + " kg.");
  }
}
Java, Programmiersprache
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.