Hallo zusammen,
ich habe eine Klasse geschrieben, mit der Operationen auf Brüche durchgeführt werden können. Funktioniert soweit auch, allerdings sind im Code sicher viele Designfehler. Ich würde euch bitten mal drüber zu schauen und mir Anregungen zu geben, wie man etwas besser machen können. Z.b. Exceptions zu benutzen, aber auch wie intern mit den Objekten umgegangen wird, denke da kann man noch viel besser machen!
Main
ich habe eine Klasse geschrieben, mit der Operationen auf Brüche durchgeführt werden können. Funktioniert soweit auch, allerdings sind im Code sicher viele Designfehler. Ich würde euch bitten mal drüber zu schauen und mir Anregungen zu geben, wie man etwas besser machen können. Z.b. Exceptions zu benutzen, aber auch wie intern mit den Objekten umgegangen wird, denke da kann man noch viel besser machen!
Java:
public class Bruch {
private int zaehler;
private int nenner;
public Bruch(int a, int b) {
this.setZaehler(a);
if (pruefeNenner(b) == false) {
System.out.println("Nenner darf nicht <= 0 sein...!");
System.exit(0);
} else {
this.setNenner(b);
}
}
public int getZaehler() {
return zaehler;
}
public int getNenner() {
return nenner;
}
public void setZaehler(int a) {
zaehler = a;
}
public void setNenner(int b) {
if (pruefeNenner(b) == false) {
System.out.println("Nenner darf nicht <= 0 sein...!");
System.exit(0);
} else {
nenner = b;
}
}
// addiert zwei Brueche und liefert dann das Ergebnis zurueck
public Bruch addieren(Bruch b) {
Bruch[] brueche = new Bruch[] { this.normieren(), b.normieren() };
int nenner = brueche[0].getNenner() * brueche[1].getNenner();
// auf Hauptnenner bringen
for (Bruch temp : brueche) {
temp.setZaehler( ( nenner / temp.getNenner() ) * temp.getZaehler() );
}
Bruch ret = new Bruch (brueche[0].getZaehler() + brueche[1].getZaehler(), nenner);
return ret.normieren();
}
// subtrahiert zwei Brueche und liefert dann das Ergebnis zurueck
public Bruch subtrahiere(Bruch b) {
Bruch[] brueche = new Bruch[] { this.normieren(), b.normieren() };
int nenner = brueche[0].getNenner() * brueche[1].getNenner();
// auf Hauptnenner bringen
for (Bruch temp : brueche) {
temp.setZaehler( ( nenner / temp.getNenner() ) * temp.getZaehler() );
}
Bruch ret = new Bruch (brueche[0].getZaehler() - brueche[1].getZaehler(), nenner);
return ret.normieren();
}
// multipliziert zwei Brueche und liefert dann das Ergebnis zurueck;
public Bruch multiplizieren(Bruch b) {
Bruch[] brueche = new Bruch[] { this.normieren(), b.normieren() };
Bruch ret = new Bruch(brueche[0].getZaehler() * brueche[1].getZaehler(),
brueche[0].getNenner() * brueche[1].getNenner());
return ret.normieren();
}
// dividiert zwei Brueche und liefert dann das Ergebnis zurueck;
public Bruch dividieren(Bruch b) {
Bruch[] brueche = new Bruch[] { this.normieren(), b.normieren() };
Bruch ret = new Bruch(brueche[0].getZaehler() * brueche[1].getNenner(),
brueche[0].getNenner() * brueche[1].getZaehler());
return ret.normieren();
}
// Wenn Nenner nicht in Ordnung ist, wird false zurueckgegeben
private static boolean pruefeNenner(int nenner) {
if (nenner <= 0) {
return false;
} else {
return true;
}
}
// nimmt einen Bruch entgegen und normiert diesen
private Bruch normieren() {
Bruch temp = new Bruch(this.getZaehler(), this.getNenner());
int ggt = ggt(Math.abs(temp.getZaehler()), temp.getNenner());
temp.setZaehler(temp.getZaehler() / ggt);
temp.setNenner(temp.getNenner() / ggt);
return temp;
}
private static int ggt(int x, int y) {
while (y != 0) {
int temp = x % y;
x = y;
y = temp;
}
return x;
}
}
Main
Java:
public class Main {
public static void main(String[] args) {
Bruch c;
Bruch a = new Bruch(-3,5);
Bruch b = new Bruch(2,1);
c = a.addieren(b);
System.out.println(c.getZaehler()+"/"+c.getNenner());
}
}
Wenn ich bei manchen Methodenaufrufen das this weglasse, fügt der Compiler das dann automatisch wieder an?
Dank euch schon mal
Viele Grüße