Liebe Gemeinde,
Ich habe folgenden Code mit Hilfe eines Tutorials verfasst, welcher auch erstaunlicherweise fehlerfrei abläuft:
bool hasEnteredMoney = false;
while (!hasEnteredMoney)
{
Console.Write("Bitte geben Sie einen Geldbetrag ein: ");
hasEnteredMoney = double.TryParse(Console.ReadLine(), out money);
if (!hasEnteredMoney)
{
Console.WriteLine("Ungültige Angabe!");
}
}
Console.ReadKey();
}
}
Im Tutorial wird auch festgestellt, dass (!hasEnteredMoney) das Äquivalent zu (hasEnteredMoney == false) darstellt.
Das verwirrt mich nun beträchtlich, da der Variablen "hasEnteredMoney" der Wert "false" am Beginn des Programms zugewiesen wurde.
Wenn man jetzt der bereits als "false" ausgewiesenen Variablen "hasEnteredMoney" noch ein !(is not) hinzufügt, käme das doch einer doppelten Verneinung gleich - also in Code ausgedrückt (!false).
Ich wäre für die Aufklärung meines vermutlich offensichtlichen Denkfehlers sehr dankbar.
Der Variablen wird bei
while (!hasEnteredMoney)
nichts zugewiesen, sondern es wird abgefragt "solange hasEnteredMoney nicht wahr ist".
Deswegen ist das das geleich:
while (hasEnteredMoney == false)
Mit hasEnteredMoney = false wird der Variablen ein neuer Wert zugewiesen.
Das passiert hier, wenn die Eingabe keine Zahl ist:
hasEnteredMoney = double.TryParse(Console.ReadLine(), out money)
Ergänzend - vielleicht hast du weniger Verständnisprobleme, wenn du statt der while-Schleife in diesem Fall eine do-while benutzt:
bool hasEnteredMoney;
do
{
Console.Write("Bitte geben Sie einen Geldbetrag ein: ");
hasEnteredMoney = double.TryParse(Console.ReadLine(), out money);
if (!hasEnteredMoney)
{
Console.WriteLine("Ungültige Angabe!");
}
}
while (!hasEnteredMoney);
Entspricht ein bisschen mehr dem "natürlichen" Ablauf.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)