Lestard's Blog Software-Development with JavaScript, XUL, Firefox-Addons, XML, Java…

15Jan/101

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.

flattr this!

Kommentare (1) Trackbacks (0)
  1. Mauky … riesen Dank! Funktioniert TOP. Danke sehr sauber reingestellt. Vielen Dank


Leave a comment

(required)

Noch keine Trackbacks.