none
Frage zum Operator !(is not) RRS feed

  • 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!

     

    Donnerstag, 14. Januar 2016 22:26

Antworten

Alle Antworten

  • Hallo,

    ich denke das Problem ist, das da keine doppelte "Verneinung" vorliegt. Der Code

    !hasEnteredMoney
    meint
    hasEnteredMoney == 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

    Donnerstag, 14. Januar 2016 23:08
    Moderator
  • 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.

    Freitag, 15. Januar 2016 00:14
  • Nach Boolean Logik kannst Du es auch als Inverter betrachten: "Nicht False" = "True"

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 15. Januar 2016 08:14
  • 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

    Freitag, 15. Januar 2016 10:54