Laden...

[gelöst] Wieso ist (!false) nicht true (doppelte Verneinung)?

Erstellt von zornfield vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.792 Views
Z
zornfield Themenstarter:in
4 Beiträge seit 2016
vor 8 Jahren
[gelöst] Wieso ist (!false) nicht true (doppelte Verneinung)?

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.

185 Beiträge seit 2005
vor 8 Jahren

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)

3.003 Beiträge seit 2006
vor 8 Jahren

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)

2.207 Beiträge seit 2011
vor 8 Jahren

Dazu auch [Tipp] Anfängerhinweis == true / == false

Gruss

Coffeebean

Z
zornfield Themenstarter:in
4 Beiträge seit 2016
vor 8 Jahren

Herzlichen Dank für Eure Erkärungen und Hinweise!