Benutzer mit den meisten Antworten
Frage zum Operator !(is not)

Frage
-
Ich hätte eine Frage zu dem Operator !(is not).
Mit Hilfe eines Tutorial habe ich folgenden, korrekt laufenden Code erstellt:
double money = 0; 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.WriteLine("Sie haben: " + money + "Euro"); Console.ReadKey();
Dabei wurde erklärt dass (!hasEnteredMoney) das Äquivalent zu (hasEnteredMoney == false) ist.Nachdem das Programm richtig abläuft ist diese Information offensichtlich korrekt.
Nun verwirrt mich jedoch, dass (!hasEnteredMoney) nach meinem Verständnis folgendes aussagt:
hasEnteredMoney = false; ist nicht (!) wahr (doppelte Verneinung).Dies widerspricht also der ursprünglich Variablenzuweisung: hasEnteredMoney = false.
Indessen vergleicht (hasEnteredMoney == false) beide Werte. Nachdem der Variablen hasEnteredMoney der Wert: false am Beginn des Programms zugewiesen wurde, ist hier für mich kein Widerspruch zu erkennen.
Kann jemand meinen Denkfehler aufklären?
Vielen Dank für eine Antwort im voraus!
Antworten
-
Hallo,
ich denke das Problem ist, das da keine doppelte "Verneinung" vorliegt. Der Code
!hasEnteredMoney
meinthasEnteredMoney == false
Es ist und bleibt eine Abfrage ob der Wert false ist. Was verstehst du da als die 2. "Verneinung"?
Die Variable hat ursprünglich den Wert false. Wenn man nun einen der oben gezeigten Codes aufruft erhält man jeweils true, ohne die Variable selbst zu ändern. Dadurch wird in die While-Schleife und ggf. in den if-Block gesprungen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Elmar BoyeEditor Freitag, 15. Januar 2016 07:41
- Als Antwort markiert Aleksander Chalabashiev Mittwoch, 20. Januar 2016 12:36
Alle Antworten
-
Hallo,
ich denke das Problem ist, das da keine doppelte "Verneinung" vorliegt. Der Code
!hasEnteredMoney
meinthasEnteredMoney == false
Es ist und bleibt eine Abfrage ob der Wert false ist. Was verstehst du da als die 2. "Verneinung"?
Die Variable hat ursprünglich den Wert false. Wenn man nun einen der oben gezeigten Codes aufruft erhält man jeweils true, ohne die Variable selbst zu ändern. Dadurch wird in die While-Schleife und ggf. in den if-Block gesprungen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Elmar BoyeEditor Freitag, 15. Januar 2016 07:41
- Als Antwort markiert Aleksander Chalabashiev Mittwoch, 20. Januar 2016 12:36
-
Herzlichen Dank für die schnelle Antwort,
Hab gedacht, dass (!hasEnteredMoney) salopp ausgedrückt bedeutet:
Die als false festgelegte Variable ist nicht(!) false - also in Code übersetzt: (hasEnteredtMoney != false)
Daher mein Irrtum bezüglich der doppelten Verneinung.
-
Hi,
die while-Schleife wird solange ausgeführt, solange der boolesche Ausdruck wahr ist. hasEnteredMoney ist solange false, solange die Schleife auszuführen ist. Erst bei true soll die Schleife nicht mehr ausgeführt werden. Also muss der Wert von HasEnteredMoney negiert werden, damit die Schleife richtig ausgeführt wird.Die doppelte Verneinung liegt hier in der genutzten Begriffswelt. Damit die Schleife ausgeführt wird, muss geprüft werden, ob es wahr ist, dass GeldEingegeben unwahr ist.
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut