Aus der Vorlesung: BruchArithmetik und ObjektOrientierung
Hier wie versprochen der Quellcode zum BruchArithmetik-Programm, welches ich in der Vorlesung erarbeitet habe.
Die Klassen für die Operationen
[java]
package Bruch2;
public class Addition implements BruchOperation {
Bruch b1;
Bruch b2;
public Addition(Bruch temp1, Bruch temp2){
this.b1 = temp1;
this.b2 = temp2;
}
public Addition(){
this.b1 = new Bruch();
this.b2 = new Bruch();
}
public Bruch ausfuehren(){
Bruch b3 = new Bruch();
b3.setZaehler(b1.getZaehler() * b2.getNenner() + b2.getZaehler() * b1.getNenner());
b3.setNenner(b1.getNenner() * b2.getNenner());
return b3;
}
}
[/java]
[java]
package Bruch2;
public class Subtraktion implements BruchOperation{
Bruch b1;
Bruch b2;
public Subtraktion(){
this.b1 = new Bruch();
this.b2 = new Bruch();
}
public Subtraktion(Bruch b1, Bruch b2){
this.b1 = b1;
this.b1 = b2;
}
public Bruch ausfuehren(){
Bruch b3 = new Bruch();
b3.setZaehler(b1.getZaehler() * b2.getNenner() - b2.getZaehler() * b1.getNenner());
b3.setNenner(b1.getNenner() * b2.getNenner());
return b3;
}
}
[/java]
[java]
package Bruch2;
public class Multiplikation implements BruchOperation {
Bruch b1;
Bruch b2;
Bruch b3;
public Multiplikation(Bruch b1, Bruch b2){
this.b1 = b1;
this.b2 = b2;
this.b3 = new Bruch(1,1);
}
public Bruch ausfuehren(){
b3.setZaehler(b1.getZaehler() * b2.getZaehler());
b3.setNenner(b1.getNenner() * b2.getNenner());
return b3;
}
}
[/java]
[java]
package Bruch2;
public class Division implements BruchOperation{
Bruch b1;
Bruch b2;
Bruch b3;
public Division(Bruch b1, Bruch b2){
this.b1 = b1;
this.b2 = b2;
this.b3 = new Bruch(1,1);
}
public Bruch ausfuehren(){
b3.setZaehler( b1.getZaehler() * b2.getNenner());
b3.setNenner(b1.getNenner() * b2.getZaehler());
return b3;
}
}
[/java]
[java]
package Bruch2;
public class Kuerzen {
Bruch b1;
Bruch b3;
public Kuerzen(Bruch b1){
this.b1 = b1;
this.b3 = new Bruch(1,1);
}
public Bruch ausfuehren() {
int temp;
int a = b1.getZaehler();
int b = b1.getNenner();
while(b != 0){
temp = a % b;
a = b;
b = temp;
}
b3.setZaehler(b1.getZaehler() / a);
b3.setNenner(b1.getNenner() /a);
if(b3.getNenner() == 0){
System.out.println("Fehler: Division durch Null");
return null;
}else{
return b3;
}
}
}
[/java]
Die Klasse Bruch
[java]
package Bruch2;
public class Bruch {
private int zaehler;
private int nenner;
public Bruch(){
zaehler = 1;
nenner = 1;
}
public Bruch(int zaehler, int nenner){
this.nenner = nenner;
this.zaehler = zaehler;
}
public void setZaehler(int temp){
this.zaehler = temp;
}
public int getZaehler(){
return this.zaehler;
}
public void setNenner(int temp){
this.nenner = temp;
}
public int getNenner(){
return nenner;
}
}
[/java]
Die Klasse BruchRechner mit der Main-Methode
[java]
package Bruch2;
public class BruchRechner {
public static void main(String[] args) {
System.out.println("Bruchrechner");
String operation = args[0];
int z1 = Integer.parseInt(args[1]);
int n1 = Integer.parseInt(args[2]);
int z2 = Integer.parseInt(args[3]);
int n2 = Integer.parseInt(args[4]);
Bruch b1 = new Bruch(z1,n1);
Bruch b2 = new Bruch(z2,n2);
Bruch b3 = new Bruch();
//Instanziiere eine BruchOperation und binde die konkrete Operation dynamisch mit hilfe der Methode welcheOperation
BruchOperation op = welcheOperation(operation, b1, b2);
//Führe die Operation aus und lege das Ergebnis in b3 ab
b3 = op.ausfuehren();
Kuerzen kurz = new Kuerzen(b3);
b3 = kurz.ausfuehren();
System.out.println("Bruch1 = " + b1.getZaehler() + "/" + b1.getNenner());
System.out.println("Bruch2 = " + b2.getZaehler() + "/" + b2.getNenner());
System.out.println("Ergebnis = " + b3.getZaehler() + "/" + b3.getNenner());
}
//Methode bindet die Konkrete Operation dynamisch und gibt die BruchOperation zurück
static public BruchOperation welcheOperation(String operation, Bruch b1, Bruch b2){
//Deklariere die BruchOperation und belege diese mit null vor. Das ist notwendig, da durch die IF-Bedingungen nicht zweifelsfrei ausgeschlossen werden kann,
//dass überhaupt eine Operation gebunden wird. Falls keiner der abgefragten Fälle eintritt, muss "op" trotzdem instanziiert sein, damit der Compiler keinen Fehler bringt
BruchOperation op = null;
//Schau nach, welche Operation konkret eingegeben wurde und Binde dynamisch die entsprechende Operation an "op". Damit wird jeweils der korrekte Contructor aufgerufen.
if(operation.equals("add")){
op = new Addition(b1,b2);
}
if(operation.equals("sub")){
op = new Subtraktion(b1,b2);
}
if(operation.equals("div")){
op = new Division(b1,b2);
}
if(operation.equals("mul")){
op = new Multiplikation(b1,b2);
}
return op;
}
}
[/java]
Zum Schluss das Interface BruchOperation. Dieses wird von allen Operationen implementiert.
[java]
package Bruch2;
public interface BruchOperation {
//Jede Klasse, die das Interface implementiert, muss diese Methode besitzen
public Bruch ausfuehren();
}
[/java]
Falls zu dem Programm noch Fragen offen sein sollten, so können diese gerne in den Kommentaren gestellt werden oder natürlich zur nächsten Übungsstunde.






Januar 15th, 2010
Mauky … riesen Dank! Funktioniert TOP. Danke sehr sauber reingestellt. Vielen Dank