Klassen und Objekte (3)

Noch mehr Bruchrechnung

Richtig nützlich wird ein Bruchrechenprogramm erst, wenn man damit Brüche auch addieren, subtrahieren, multiplizieren dund dividieren kann. Das wollen wir uns jetzt vornehmen. Dazu schreiben wir erste einmal ein Bruchrechenprogramm, das vom Benutzer zwei Brüche abfragt:


import java.util.*;

public class Bruchrechnung2 {

  public static void main(String[] args) {
    System.out.println("Bruchrechnung 2\n");
    Scanner Eingabe = new Scanner(System.in);

    System.out.print("Geben Sie den ersten Bruch in der Form z/n ein : ");
    Bruch b1 = new Bruch(Eingabe.next());
    System.out.print("Geben Sie den ersten Bruch in der Form z/n ein : ");
    Bruch b2 = new Bruch(Eingabe.next());

    System.out.println(b1.zeigBruch());
    System.out.println(b2.zeigBruch());
  }
}


Wie Sie an der Zeile sehen, werden Brüche hier als String entgegengenommen und an die Klasse Bruch weitergegeben. Diese braucht dann natürlich einen anderen Konstruktor, der Bruchstrings analysieren kann. Fügen Sie den folgenden Code in die Klasse Bruch ein:


  public Bruch(String br) {
    int p = br.indexOf('/');
    this.zähler = Integer.valueOf(br.substring(0,p));
    this.nenner = Integer.valueOf(br.substring(p+1,br.length()));
  }


Als Gegenstück sollten wir in die Klasse Bruch auch eine Funktion einbauen, die den jeweiligen Bruch in der Form Zähler/Nenner als Text zurückliefert. Hier ist sie:


  public String zeigBruch() {
    return zähler+"/"+nenner;
  }


Hier zwei Vorschläge, wie man die beiden Brüche multiplizieren kann. Sie müssen ebenfalls in die Klasse Bruch eingebaut werden:


  public String mul(Bruch b) {
    return zähler*b.getZähler()+"/"+nenner*b.getNenner();
  }

  public static String produkt(Bruch b1 , Bruch b2) {
    return b1.getZähler()*b2.getZähler()+"/"+b1.getNenner()*b2.getNenner();
  }


Die erste Variante bezieht sich auf das aktuelle Objekt. Sie kann (aus Bruchrechnung2 heraus) folgendermaßen verwendet werden:
Bruch b3 = new Bruch(b2.mul(b1));

Die zweite Variante ist eine statische Funktion, d.h. sie bezieht sich allgemein auf die Klasse. Sie wird so verwendet:
Bruch b4 = new Bruch(Bruch.produkt(b1,b2));

Hat man das Produkt als neues Objekt erzeugt, dann kann man es mit System.out.println(b4.zeigBruch()); anzeigen.
Man kann beide Funktionen aber auch verwenden, ohne ein neues Objekt zu erzeugen:
System.out.println(b2.mul(b1));

Nachdem Sie alles, was in den drei Programmfragmenten oben passiert, kapiert und ausprobiert haben, können Sie sich nun den Aufgaben zuwenden.

Aufgaben:

  1. Deklarieren Sie in der Klasse Bruch die entsprechenden Funktionen add(), sub(), div().
    oder die statischen Varianten summe(), differenz(), quotient().
  2. Deklarieren Sie in der Klasse Bruch eine Funktion boolean istKleinerAls(), die wie folgt eingesetzt werden kann:
    if (b1.istKleinerAls(b2)) {System.out.println("Der erste Bruch ist kleiner als der zweite.");