0 Daumen
1,2k Aufrufe

Ich habe ein Schulprojekt, wo wir ein Programm erstellen sollen, welches Brüche berechnet (gemischten Bruch etc.) und addiert/subtrahiert/...

Wir programmieren mit "BlueJ" und müssen davor unser Projekt mit "UMLet" planen.

Avatar von

Plane erstmal dein Projekt und zeig uns dann dein UML-Klassendiagramm. Darauf aufbauend kannst du dann dein Java-Programm schreiben - vorausgesetzt, dein UML Diagramm ist korrekt. Überlege dir, was man für das Rechnen mit Brüchen alles benötigt und erstelle dann die einzelnen Klassen. So könnte eine Klasse zum Beispiel "Bruch" heißen und die Klassenattribute "int nenner" und "int zaehler" beinhalten.

Ich weiß nicht, wie ich hier mein UML Diagramm hochladen kann, einen Screenshot davon machen geht nicht.

Das ist was ich bis jetzt zum Bruch habe, jedoch fehlt bei "private int erweitern" noch "return", wird zumindest in BlueJ bei mir so angezeigt.

public class Bruch
{
  //Attribute
  private int zaehler;
  private int nenner;
  private int faktor;
 
  //Konstruktor
  public Bruch(int pZaehler, int pNenner)

  {
      zaehler = pZaehler;
      nenner = pNenner;
     
  }
  //Methoden für Bruchrechnung
  public int ggt(int a, int b) {

  if (a == 0)
  return b;
  while (b != 0) {
  if (a > b)
  a = a - b;
  else
  b = b - a;
  }
  return a;
  }
 
 
 
  private void kuerze()
  { 
     
      zaehler = zaehler / ggt(zaehler, nenner);
      nenner = nenner / ggt(zaehler, nenner);
      if (nenner < 0)
      zaehler = -zaehler;
      nenner = -nenner;
 
 
  }
     
 
  private int erweitern(int faktor)
  { 
      zaehler = zaehler * faktor;
      nenner = nenner * faktor;
 
 
  }
 

}
jedoch fehlt bei "private int erweitern" noch "return"

Und bei private void kuerze fehlt es nicht.

Vergleiche die Signaturen der beiden Funktionen. Überlege dir dann, ob du diesen Unterschied wirklich benötigst.

Außerdem: private int erweitern verwendet den Infinitiv als Funktionsname, private void kuerze verwendet dagegen den Imperativ. Das ist zwar technisch kein Problem, aber etws mehr Konsistenz bei der Benennung ist schon wünschenswert.

public int ggt(int a, int b) {

  if (a == 0)
  return b;
  while (b != 0) {
  if (a > b)
  a = a - b;
  else
  b = b - a;
  }
  return a;
  }`

Oder

public int ggt(int a, int b) {
    if (b == 0)
        return a;
    else
        return ggt(b, a%b);
}

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Programm Brüche mit BlueJ programmieren

Bei der Entwicklung eines Programms zur Berechnung von Brüchen mit BlueJ beginnst du am besten mit der Planung deines Projekts unter Verwendung von UML (Unified Modeling Language), speziell mit einem Tool wie UMLet.

Schritt 1: UMLet Planung

In UMLet könntest du zunächst ein Klassendiagramm erstellen, um die Struktur deiner Applikation zu planen. Ein einfaches Projekt könnte aus einer einzelnen Klasse mit dem Namen Bruch bestehen. Diese Klasse hat möglicherweise die folgenden Attribute und Methoden:

- Attribute:
- zaehler (für den Zähler des Bruchs)
- nenner (für den Nenner des Bruchs)

- Methoden:
- Konstruktor (um den Bruch zu initialisieren)
- addiere(Bruch b) (um einen Bruch zu dem aktuellen Bruch hinzuzufügen)
- subtrahiere(Bruch b) (um einen Bruch von dem aktuellen Bruch abzuziehen)
- multipliziere(Bruch b) (um den aktuellen Bruch mit einem anderen Bruch zu multiplizieren)
- dividiere(Bruch b) (um den aktuellen Bruch durch einen anderen Bruch zu teilen)
- kuerze() (um den Bruch zu kürzen)
- toString() (um den Bruch als String auszugeben, möglicherweise in gemischter Form)

Schritt 2: Bruch Klasse implementieren

Für die Implementierung in BlueJ erstellst du dann eine Klasse, die dem Entwurf folgt. Hier ist ein einfaches Beispiel, wie der Code aussehen könnte:

java
public class Bruch {
    private int zaehler;
    private int nenner;

    // Konstruktor
    public Bruch(int zaehler, int nenner) {
        this.zaehler = zaehler;
        this.nenner = nenner;
        this.kuerze(); // Direkt beim Erstellen kürzen
    }

    // Methoden zum Hinzufügen, Subtrahieren, Multiplizieren, Dividieren und Kürzen

    public void addiere(Bruch b) {
        this.zaehler = this.zaehler * b.nenner + b.zaehler * this.nenner;
        this.nenner = this.nenner * b.nenner;
        this.kuerze();
    }

    public void subtrahiere(Bruch b) {
        this.zaehler = this.zaehler * b.nenner - b.zaehler * this.nenner;
        this.nenner = this.nenner * b.nenner;
        this.kuerze();
    }

    public void multipliziere(Bruch b) {
        this.zaehler *= b.zaehler;
        this.nenner *= b.nenner;
        this.kuerze();
    }

    public void dividiere(Bruch b) {
        this.zaehler *= b.nenner;
        this.nenner *= b.zaehler;
        this.kuerze();
    }

    // Hilfsmethode zum Kürzen
    private void kuerze() {
        int ggt = ggt(this.zaehler, this.nenner);
        this.zaehler /= ggt;
        this.nenner /= ggt;
    }

    // Berechnet den größten gemeinsamen Teiler
    private int ggt(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    // Gibt den Bruch als String aus
    @Override
    public String toString() {
        return this.zaehler + "/" + this.nenner;
    }
}

Dieser Beispielcode stellt eine grundlegende Implementierung dar. Je nach Spezifikation deines Projekts können weitere Funktionen oder Verfeinerungen (wie die Handhabung negativer Brüche oder die Implementierung eines gemischten Bruchs) erforderlich sein.

Schritt 3: Testen

Nach der Implementierung solltest du deine Klasse gründlich testen, um sicherzustellen, dass alle Methoden korrekt funktionieren. Du kannst dies direkt in BlueJ tun, indem du Testobjekte deiner Klasse erstellst und die Methoden mit unterschiedlichen Eingaben aufrufst.

Hinweis: Es ist immer wichtig, Fehlerfälle wie die Division durch Null zu berücksichtigen und entsprechend zu behandeln, um das Programm robuster zu gestalten.

Mit diesem Ansatz und diesen Beispielen solltest du in der Lage sein, deine Aufgabe erfolgreich zu bearbeiten. Viel Erfolg mit deinem BlueJ-Projekt!
Avatar von

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community