Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

INFINITI beim dividieren von 0 und das Beenden bei keiner Eingabe #17

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions Taschenrechner/AnwendungsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@ public AnwendungsController(ConsoleView view, RechnerModel model)

public void Ausfuehren()
{
view.HoleEingabenFuerErsteBerechnungVomBenutzer();
model.Berechne();
view.GibResultatAus();
view.HoleEingabenFuerFortlaufendeBerechnung();

while (!view.BenutzerWillBeenden)
{
if(view.BenutzerWillNeuRechnen)
{
view.HoleEingabenFuerErsteBerechnungVomBenutzer();
}
model.Berechne();
view.GibResultatAus();
view.HoleEingabenFuerFortlaufendeBerechnung();
Expand Down
79 changes: 57 additions & 22 deletions Taschenrechner/ConsoleView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@ namespace Taschenrechner
class ConsoleView
{
private RechnerModel model;
private string textAusgabe = "";


public ConsoleView(RechnerModel model)
{
this.model = model;
BenutzerWillBeenden = false;
BenutzerWillNeuRechnen = true;
}

public bool BenutzerWillBeenden { get; private set; }

public bool BenutzerWillNeuRechnen { get; private set; }

public void HoleEingabenFuerErsteBerechnungVomBenutzer()
{
BenutzerWillNeuRechnen = false;
// TODO: Refactoring benötigt - Probleme: unübersichtlich, nicht DRY, nicht SLA!

// Eingabe und Validierung der ersten Zahl
Expand All @@ -42,6 +46,7 @@ public void HoleEingabenFuerErsteBerechnungVomBenutzer()
}
}
while (model.AktuellerFehler == Fehler.GrenzwertUeberschreitung);
textAusgabe = model.ErsteZahl + " " + model.Operation + " " + model.ZweiteZahl + " ";
}

public void HoleEingabenFuerFortlaufendeBerechnung()
Expand All @@ -52,40 +57,47 @@ public void HoleEingabenFuerFortlaufendeBerechnung()
{
BenutzerWillBeenden = true;
}
else if (eingabe.ToUpper() == "C")
{
BenutzerWillNeuRechnen = true;
}
else
{
if (eingabe.ToUpper() == "OPERATOR")
{
string altOperator = model.Operation;
model.Operation = HoleOperatorVomBenutzer();
if ((altOperator == "+" || altOperator == "-") && (model.Operation == "*" || model.Operation == "/"))
{
textAusgabe = "(" + textAusgabe + ")" + " ";
}
Console.WriteLine("Bitte gib eine weitere Zahl ein");
eingabe = eingabeAufZahlUeberpruefen(Console.ReadLine()).ToString();
}
model.ErsteZahl = model.Resultat;
model.ZweiteZahl = Convert.ToDouble(eingabe);
}
model.ZweiteZahl = eingabeAufZahlUeberpruefen(eingabe);
textAusgabe += model.Operation + " " + model.ZweiteZahl + " ";
}
}

private string HoleNaechsteAktionVomBenutzer()
{
Console.Write("Bitte gib eine weitere Zahl ein (FERTIG zum Beenden): ");
return Console.ReadLine();
string eingabe = "";
while (eingabe == "")
{
Console.Write("Bitte gib eine weitere Zahl ein (FERTIG zum Beenden, OPERATION für neuen Operator oder C zum neustarten): ");
eingabe = Console.ReadLine();

}
return eingabe;
}

private double HoleZahlVomBenutzer()
{
string eingabe;
double zahl;
Console.Write("Bitte gib eine Zahl für die Berechnung ein: ");
eingabe = Console.ReadLine();

while (!double.TryParse(eingabe, out zahl))
{
Console.WriteLine("Du musst eine gültige Gleitkommazahl eingeben!");
Console.WriteLine("Neben den Ziffern 0-9 sind lediglich die folgenden Sonderzeichen erlaubt: ,.-");
Console.WriteLine("Dabei muss das - als erstes Zeichen vor einer Ziffer gesetzt werden.");
Console.WriteLine("Der . fungiert als Trennzeichen an Tausenderstellen.");
Console.WriteLine("Das , ist das Trennzeichen für die Nachkommastellen.");
Console.WriteLine("Alle drei Sonderzeichen sind optional!");
Console.WriteLine();
Console.Write("Bitte gib erneut eine Zahl für die Berechnung ein: ");
eingabe = Console.ReadLine();
}

return zahl;
return eingabeAufZahlUeberpruefen(eingabe);
}

private string HoleOperatorVomBenutzer()
Expand All @@ -110,6 +122,9 @@ private string HoleOperatorVomBenutzer()

public void GibResultatAus()
{

Console.WriteLine(textAusgabe + "= " + model.Resultat);
/*
switch (model.Operation)
{
case "+":
Expand All @@ -132,6 +147,26 @@ public void GibResultatAus()
Console.WriteLine("Du hast eine ungültige Auswahl der Operation getroffen.");
break;
}
*/
}

public double eingabeAufZahlUeberpruefen(string eingabe)
{
double zahl;
while (!double.TryParse(eingabe, out zahl))
{
Console.WriteLine("Du musst eine gültige Gleitkommazahl eingeben!");
Console.WriteLine("Neben den Ziffern 0-9 sind lediglich die folgenden Sonderzeichen erlaubt: ,.-");
Console.WriteLine("Dabei muss das - als erstes Zeichen vor einer Ziffer gesetzt werden.");
Console.WriteLine("Der . fungiert als Trennzeichen an Tausenderstellen.");
Console.WriteLine("Das , ist das Trennzeichen für die Nachkommastellen.");
Console.WriteLine("Alle drei Sonderzeichen sind optional!");
Console.WriteLine();
Console.Write("Bitte gib erneut eine Zahl für die Berechnung ein: ");
eingabe = Console.ReadLine();
}

return zahl;
}
}
}
4 changes: 2 additions & 2 deletions Taschenrechner/RechnerModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public double ErsteZahl
}
}
}

private double zweiteZahl = 0;
private double zweiteZahl = 0;
public double ZweiteZahl
{
get { return zweiteZahl; }
Expand Down