C# Mehrmalige Eingabe mit Summe in der Schleife?
moin,
ich versuche Münzeneinwürfe in einem Automat zu erstellen mit der unendlichen Eingabe sobald beispielsweise die Taste [F3] gedrückt wird, die die Eingabe stoppt.
Welche Schleife nutze ich dafür und wie setze ich diese ein? Anbei meine if-Statements:
Mit jeder Eingabe soll die Summe errechnet werden, stimmt sobald der total? Oder sollte ich es anders definieren?
2 Antworten
Wenn du mehr als einmal nen input haben willst brauchste diese reihenfolge im ablauf:
definition von start und total
while(true) schleife
innerhalb der schleife die abfrage der konsole und deine auswertung. F3 verlässt die schleife mit break
Das wäre es imgrunde schon um das zu erreichen was du möchtest.
Ansonsten: Deine konsolen ausgaben kannste aus der if rausziehen. Das machste sowieso doch jedes mal wenn du eine taste drückst. Und wenn du sie in jeder if clausel drinne hast. Kannste sie auch darunter benutzen.
Abgesehen davon. Ersetz dein gesamtes if/else ding. Durch eine switch anweisung.
z.b.
switch(Userinput.Key){
case ConsoleKey.F8:
//Ausummieren.
break;
case Consolekey.F7:
//aufsummieren
break;
usw usw
}
Auch die summierung kannste aus der if/else rausziehen. Das einzige was sich verändert ist ja das Objekt was du aus deiner liste holst. Da könntest du das objekt einfach in ne variable packen die du am ende bearbeitest.
Es geht sogar noch eleganter. Anstatt einer liste verwendest du einfach ein Dictionary. (Eine Map) Als key haste die ConsoleKeys und als values haste die Objekte.
Dann brauchste weder die grosse if/else noch ne switch anweisung. Weil die Keys sind ja direkt an die werte geknüpft. Aber das könnte ggf. ein wenig zuviel für deinen wissenstand sein.
EDIT: hab noch ein fehler endeckt:
die zeile:
total = (start + coinInCent) /100
stimmt nicht.
Spätestens bei der zweiten eingabe wirste bemerken das der dir in total immer nur die zuletzt getätigte eingame anzeigt.
Lass die variable start weg. Und initialisiere total mit 0.
Anschliessend ersetzt du in der zeile start durch total.
Sodas da steht: total = total+ coin in cent
Die /100 lässt du auch weg. Das rechnest du dann vor der ausgabe um.
EDIT 2:
Nutze die while schleife wie borisg sie dargestellt hat. Daran habe ich mal wieder nicht gedacht. Das wäre die korrekte implementierung....
Die Variable Total ist doch schon allgemein genug.
Hier mal ein beispiel. (Pseudocode ich erhebe keinen anspruch auf compillierbarkeit)
int32 total = 0
userinput2 = console.readkey();
while(userinput2 != Console.f3){
//Deine Switch die nur total aufsummiert
//Hier nach der switch dann die ausgabe von Total in der Console.
}
So meinte ich das in der richtung. In den ifs oder in der switch musst du ja nur dein total erhöhen. Für alles andere ist die if oder die Switch anweisung ja nicht wichtig.
also sollte es so beispielsweise passen? dabei passiert jedoch nichts wenn ich die F-Tasten drücke :/
while(userInput2.Key != ConsoleKey.F3)
{
switch (userInput2.Key)
{
case ConsoleKey.F5
total = total + values[0].CoinInCent;
userInput2 = Console.ReadLine();
break;
case ConsoleKey.F6
...
}
}
total = total / 100;
Console.WriteLine("Your Credit: " + total +);
Ich würde folgendes schreiben:
userInput2 = Console.ReadKey();
while(userInput2 != Console.F3) {
// deine Anweisungen hier
userInput2 = Console.ReadKey(); // nächstes Eingabezeichen
}
Dass du überlegen könntest, die lange Kaskade der Fallunterscheidungen durch eine switch-Anweisung zu ersetzen, wurde schon gesagt.
vielen herzlichen Dank für deine ausführliche Antwort! hab jetzt vor das Ganze in switch umzuwandeln, verstehe jedoch nicht wie du es mit dem Rausziehen von Summierungen/Konsolenausgaben meinst... soll es außerhalb vom switch stattfinden? dann müsste die Variable verallgemeinert werden oder? ich weiß nicht genau wie ich das definieren soll :/