Das folgende Listing zeigt die wesentlichen Teile der Lösung für das Bruchrechenprogramm (Kapitel 19 Aufgabe 6):
// Klasse Bruch Aufgabe 6 Kapitel 19 public class Bruch //eine Klasse für Bruch { private long zaehler = 1 ; private long nenner = 1 ; // Das sind die Attribute // das Schlüsselwort private verhindert, das von außen auf die Attribute // zugegriffen werden kann. Stichwort: Datenkapselung private long ggT (long a, long b) // eine Hilfsmethode, die nicht außer- { // halb verfügbar ist. long z ; while (b != 0) { z = a % b ; a = b ; b = z ; } return a ; } Bruch (long za, long ne) // der Konstruktor { zaehler = za ; nenner = ne ; } public String ausgabe () // gibt einen Bruchstring zurück { String s = String.valueOf(zaehler) + "/" + String.valueOf(nenner) ; return s ; } public void einlesen (String eingabe) // liest einen String als Bruch in // die Attribute ein { int mitte = eingabe.indexOf("/") ; String zaehlerString = eingabe.substring(0,mitte) ; String nennerString = eingabe.substring(mitte+1,eingabe.length()) ; zaehler = Long.parseLong(zaehlerString) ; nenner = Long.parseLong(nennerString) ; } public long gibZaehler () { return zaehler ; } public long gibNenner () { return nenner ; }
public void erweitere (long k) { zaehler *= k ; nenner *= k ; } public void kuerze () { long teiler = ggT(zaehler,nenner) ; zaehler /= teiler ; nenner /= teiler ; if (nenner < 0) { this.erweitere(-1) ; } } void mult(Bruch b) { zaehler *= b.gibZaehler() ; nenner *= b.gibNenner() ; this.kuerze() ; } void divi(Bruch b) { zaehler *= b.gibNenner() ; nenner *= b.gibZaehler() ; this.kuerze() ; } void addi (Bruch b) { long kgv = nenner*b.gibNenner()/ggT(nenner,b.gibNenner()) ; zaehler = zaehler*kgv/nenner + b.gibZaehler()*kgv/b.gibNenner() ; nenner = kgv ; this.kuerze() ; } void subt (Bruch b) { long kgv = nenner*b.gibNenner()/ggT(nenner,b.gibNenner()) ; zaehler = zaehler*kgv/nenner - b.gibZaehler()*kgv/b.gibNenner() ; nenner = kgv ; this.kuerze() ; } }
// Anfang Methodenaus bruchrechner public void jButton1_ActionPerformed(ActionEvent evt) { Bruch bruch1 = new Bruch(1,1) ; Bruch bruch2 = new Bruch(1,1) ; bruch1.einlesen(jTextField1.getText()) ; bruch2.einlesen(jTextField2.getText()) ; bruch1.addi(bruch2) ; jTextField3.setText(bruch1.ausgabe()) ; }
Uns interessiert hier vor allem das Umwandeln des Bruchstrings in der Form „3/5“ in die zwei long-Zahlen für Zähler und Nenner, da hier einige wichtige Methoden zur Stringbearbeitung verwendet werden. Hier eine Übersicht:
String string1 ; String string2 ; //erzeugt zwei instanzen vom Typ string
string1.String()
erzeugt einen Leerstring als string 1
string1.String(string2)
Als string1 wird eine Kopie von string2 angelegt
string1.String(zeichenfeld)
Der String1 wird aus einem Zeichenfeld erzeugt, also einer Variablem vom Typ char[]
string2 = string1.substring(beginn, ende)
Dabei wird aus dem string1 ein Teilstring herausgelesen und in string 2 gespeichert. Die beiden int-Variablen begin und end geben Anfangs- und Endposition des Teilstrings im eigentlichen String an. Dabei werden die Zeichen von 0 ab gezählt. End ist die Position des ersten Zeichens hinter dem Teilstring. string2 = string1.substring(0, 3) ergibt den Teilstring der Zeichen 0 bis 2, also der ersten 3 Zeichen.
int laenge =string1.length()
gibt die Länge eines Strings zurück. Wie bei Feldern haben bei einem String der Länge 5 die Zeichen die Indizes (Hausnummern) 0 bis 4.
int pos = string1.indexOf(“ab“) ;
sucht nach dem ersten Vorkommen des Teilstrings “ab“ in string1 und gibt dessen Position zurück. Der Parameter kann natürlich auch eine Stringvariable sein.
string1.toLowerCase() ; string1.toUpperCase
wandelt alle Zeichen eines Strings in Klein- bzw. Großbuchstaben um. Nicht wandelbare Zeichen wie Ziffern oder Satzzeichen bleiben erhalten.
string1.replace(‘a‘,‘z‘)
ersetzt alle a’s im String durch z’s. Als Parameter sind natürlich auch char-Variablen erlaubt.
boolean test = string1.equals(string2)
überprüft zwei Strings auf Gleichheit. Es gibt noch die Methode equalsIgnoreCase, die zusätzlich Unterschiede in Groß- und Kleinschreibung ignoriert.