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 🙂 Ich denke, nur so komme ich voran.
Also Feuer frei! (Falls überhaupt jemand Lust hat das komplett zu lesen 😀)
Danke schonmal!