Hallo Leute, folgende Aufgabe:
Habe ich wie folgt gelöst:
Bruchklasse
Eingabe/Ausgabe
Bruchautomat
Mich interessiert was ich besser machen kann, da ich noch recht neu in der Programmierung bin
Ich denke, nur so komme ich voran.
Also Feuer frei! (Falls überhaupt jemand Lust hat das komplett zu lesen
)
Danke schonmal!
Schreiben Sie ein Programm Bruchautomat, welches die Klasse Bruchautomat enthält und das Package Bruch. Ausserdem schreiben Sie eine Klasse Bruch als Datenklasse und eine Kasse I_O als Ein_Ausgabe-Klasse.
Die Datenklasse wird von der Klasse Bruchautomat benutzt, ebenso die I_O Klasse. Die Klasse Bruchautomat enthält die „main-methode“. In der main-methode sind zuerst die Eingabe Methoden der Klasse I_O aufzurufen , um die beiden Brüche einzugeben. (siehe unten). Ausserdem ist der Operator einzugeben, der zeigt, welche der Bruch-Funktionen aufgerufen werden soll.
Danach ist über die Auswahl des Operators (+ - * / ) die entsprechende Mitgliedsfunktionen der Klasse Bruch aufzurufen.Das Ergebnis der mathematischen Operation ist gekürzt auszugeben. Die Funktion „Kürzen“ hat die Form: private Bruch kuerzen(Bruch b) und ist in der Klasse Bruch zu plazieren.
Das Ganze soll wiederholbar sein, bis ein Abbruchkriterium das Programm beendet. Fehler sind abzufangen.
Tests:
a) Gutfall ohne Kürzen: +Habe ich wie folgt gelöst: - * /
b) Gutfall mit Kürzen: + - * /
c) Teilen durch '0' (Kehrwert berücksichtigen)
d) Wer's kann: Eingabe von Sonderzeichen abfangen (optional)
Habe ich wie folgt gelöst:
Bruchklasse
Java:
public class Bruch
{
private int zaehler;
private int nenner;
public Bruch addieren(Bruch br2)
{
Bruch erg = new Bruch();
int z, n;
z = (zaehler * br2.getNenner()) + (br2.getZaehler() * nenner);
n = nenner * br2.getNenner();
erg.setZaehler(z);
erg.setNenner(n);
return erg;
}
public Bruch subtrahieren(Bruch br2)
{
Bruch erg = new Bruch();
int z, n;
z = (this.getZaehler() * br2.getNenner()) - (br2.getZaehler() * this.getNenner());
n = this.getNenner() * br2.getNenner();
erg.setZaehler(z);
erg.setNenner(n);
return erg;
}
public Bruch multiplizieren(Bruch br2)
{
Bruch erg = new Bruch();
int z, n;
z = this.getZaehler() * br2.getZaehler();
n = this.getNenner() * br2.getNenner();
erg.setZaehler(z);
erg.setNenner(n);
return erg;
}
public Bruch dividieren(Bruch br2)
{
Bruch erg = new Bruch();
int z, n;
z = this.getZaehler() * br2.getNenner();
n = this.getNenner() * br2.getZaehler();
erg.setZaehler(z);
erg.setNenner(n);
return erg;
}
public Bruch kuerzen()
{
int zahl1 = this.getZaehler();
int zahl2 = this.getNenner();
while (zahl2 != 0)
{
if (zahl1 > zahl2)
{
zahl1 = zahl1 - zahl2;
}
else
{
zahl2 = zahl2 - zahl1;
}
}
int ggT = zahl1;
this.setZaehler(this.getZaehler() / ggT);
this.setNenner(this.getNenner() / ggT);
return this;
}
public int getZaehler()
{
return zaehler;
}
public void setZaehler(int zaehler)
{
this.zaehler = zaehler;
}
public int getNenner()
{
return nenner;
}
public void setNenner(int nenner)
{
this.nenner = nenner;
}
}
Eingabe/Ausgabe
Java:
package view;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import model.Bruch;
public class I_O
{
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
public char operator() throws IOException
{
System.out.println("");
System.out.println("Bitte Operator eingeben: ");
String oper = buffer.readLine();
char operator = oper.charAt(0);
return operator;
}
public Bruch eingabe(int count)
{
int z = 0;
int n = 0;
boolean nichtGueltig = false;
Bruch br = new Bruch();
do
{
try
{
System.out.println("Bitte " + count + ". Zähler eingeben.");
z = Integer.parseInt(buffer.readLine());
nichtGueltig = false;
}
catch (Exception e)
{
System.out.println("");
System.out.println("Fehler bei der " + count + ". Zählereingabe. \n");
nichtGueltig = true;
}
} while (nichtGueltig);
br.setZaehler(z);
do
{
try
{
System.out.println("Bitte " + count + ". Nenner eingeben.");
n = Integer.parseInt(buffer.readLine());
if (n == 0)
{
System.out.println(" ");
System.out.println("Null ist keine gültige Eingabe. \n");
nichtGueltig = true;
}
else
{
nichtGueltig = false;
}
}
catch (Exception e)
{
System.out.println("");
System.out.println("Fehler bei der " + count + ". Nennereingabe. \n");
nichtGueltig = true;
}
} while (nichtGueltig);
br.setNenner(n);
return br;
}
public Bruch eingabe(int count, char operator)
{
int z = 0;
int n = 0;
boolean nichtGueltig = false;
Bruch br = new Bruch();
do
{
try
{
System.out.println("Bitte " + count + ". Zähler eingeben.");
z = Integer.parseInt(buffer.readLine());
if (operator == '/' && z == 0)
{
System.out.println(" ");
System.out.println("Null ist keine gültige Eingabe. \n");
nichtGueltig = true;
}
else
{
nichtGueltig = false;
}
}
catch (Exception e)
{
System.out.println("");
System.out.println("Fehler bei der " + count + ". Zählereingabe. \n");
nichtGueltig = true;
}
} while (nichtGueltig);
br.setZaehler(z);
do
{
try
{
System.out.println("Bitte " + count + ". Nenner eingeben.");
n = Integer.parseInt(buffer.readLine());
if (n == 0)
{
System.out.println(" ");
System.out.println("Null ist keine gültige Eingabe. \n");
nichtGueltig = true;
}
else
{
nichtGueltig = false;
}
}
catch (Exception e)
{
System.out.println("");
System.out.println("Fehler bei der " + count + ". Nennereingabe. \n");
nichtGueltig = true;
}
} while (nichtGueltig);
br.setNenner(n);
return br;
}
public void ausgabe(Bruch br1, Bruch br2, char operator, Bruch erg)
{
System.out.println("");
System.out.println(
br1.getZaehler() + " / " + br1.getNenner() + " " + operator + " " +
br2.getZaehler() + " / " + br2.getNenner() + " = " +
erg.getZaehler() + " / " + erg.getNenner());
}
public boolean nochmal() throws IOException
{
boolean eingabe = true;
System.out.println(" ");
System.out.println("Nochmal? (J/N)");
while (eingabe)
{
String jn = buffer.readLine();
if (jn.equals("J") || jn.equals("j"))
{
return true;
}
else if ((jn.equals("N") || jn.equals("n")))
{
return false;
}
else
{
System.out.println("Falsche Eingabe, bitte erneut eingeben");
}
}
return false;
}
}
Bruchautomat
Java:
package controller;
import java.io.IOException;
import model.Bruch;
import view.I_O;
public class Bruchautomat {
public static void main(String[] args) throws IOException
{
boolean fortsetzen = true;
do
{
Bruchautomat ba = new Bruchautomat();
I_O io = new I_O();
Bruch br1 = new Bruch();
br1 = io.eingabe(1);
char operator = io.operator();
System.out.println("");
Bruch br2 = new Bruch();
br2 = io.eingabe(2, operator);
Bruch erg = new Bruch();
erg = ba.berechne(br1, br2, operator, io);
erg.kuerzen();
io.ausgabe(br1, br2, operator, erg);
fortsetzen = io.nochmal();
}
while (fortsetzen);
}
public Bruch berechne(Bruch br1, Bruch br2, char operator, I_O io) throws IOException
{
Bruch result = new Bruch();
switch (operator)
{
case '+' : result = br1.addieren(br2);
break;
case '-' : result = br1.subtrahieren(br2);
break;
case '*' : result = br1.multiplizieren(br2);
break;
case '/' : result = br1.dividieren(br2);
break;
}
return result;
}
}
Mich interessiert was ich besser machen kann, da ich noch recht neu in der Programmierung bin
Also Feuer frei! (Falls überhaupt jemand Lust hat das komplett zu lesen
Danke schonmal!