none
Konsolenprogramm wertet ODER nicht aus RRS feed

  • Frage

  • Hi zusammen,

    als erstes möchte ich die gesamte Community grüßen, wie man unschwer erkennen kann ist die mein erster Thread.

    Ich versuche gerade eine Konsolenanwendung zu erstellen und bin dabei auf einen seltsamen Fehler gestoßen. Eine Überprüfung eines Strings auf zwei Werte funktioniert nicht korrekt. Bei folgendem Codeausschnitt wird die Schleife, aus welchen Gründen auch immer nicht beendet:

    do{

    // Code

    }

    while((!selectedLanguage.Equals("en")) || (!selectedLanguage.Equals("de")));

    Seltsamerweise funktioniert es mit nur einer Überprüfung schon. Da ich Neuling auf der Konsolenprogrammierung bin, wäre ich über einen Hinweis was ich verkehrt mache sehr dankbar

    LG Ralf


    • Bearbeitet Ralf Robillér Samstag, 31. August 2013 10:53 Fehler im Code
    Samstag, 31. August 2013 10:51

Antworten

  • Hallo und Willkommen im Forum,
    dein Code funktioniert, nur halt nicht so wie du es dir gedacht hast. Angenommen selectedLanguage ist "de". Dann ergibt die Abfrage folgendes:

    (!selectedLanguage.Equals("en")) || (!selectedLanguage.Equals("de"))
    (!"de".Equals("en")) || (!"de".Equals("de"))
    (!false) || (!true)
    (true)||(false)
    true

    Wenn languageCode "en" ist, dann verhält es sich genauso. Soweit ich dein Vorhaben verstehe, hast du vor die Schleife solange auszuführen, wie languageCode nicht "en" oder "de" ist. Dann müsste die Abfrage so aussehen:

    (selectedLanguage != "de" && selectedLanguage != "en")

    bzw so hier:

    (!selectedLanguage.Equals("de") && !selectedLanguage.Equals("en"))

    Du musst also abfragen, ob der Wert nicht "de" und nicht "en" ist. Wenn du es trotzdem über ODER machen willst, dann würde dieser Code funktionieren:

    (!(selectedLanguage == "de" || selectedLanguage =="en"))

    bzw. swieder mit Equals:

    (!(selectedLanguage.Equals("de") || selectedLanguage.Equals("en")))

    Hierbei wird überprüft, ob selectedLanguage "de" oder "en" ist und das Ergebnis wird dann negiert.

    Am besten ist es, dan du mal in die bedingung hinein klickst und F9 drückst. Dadurch wird ein BreakPoint gesetzt und der Code wird bei der Ausführung dort angehalten. Dadurch kannst du das Ergebnis vbielleicht besser nachvollziehen.

    Vielleicht hast du auch mitbekommen, das ich einighe Klammern weg gelassen habe. Methoden muss man in C# nicht nochmal explizit einklammern, da diese sowieso schon Klammern enthalten.
    Außerdem habe ich auch noch die Varianten mit == und != aufgezeigt, welche eine kürzere Notation im Gegensatz zu Equals und Co. sind.

    PS: Es gibt hier im Forum die Möglichkeit Codeausschnitte mit Syntaxhighlightning zu belegen, dafür musst du auf den Code-Einfügen-Button klicken:


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Samstag, 31. August 2013 11:43
    Moderator

Alle Antworten

  • Hallo und Willkommen im Forum,
    dein Code funktioniert, nur halt nicht so wie du es dir gedacht hast. Angenommen selectedLanguage ist "de". Dann ergibt die Abfrage folgendes:

    (!selectedLanguage.Equals("en")) || (!selectedLanguage.Equals("de"))
    (!"de".Equals("en")) || (!"de".Equals("de"))
    (!false) || (!true)
    (true)||(false)
    true

    Wenn languageCode "en" ist, dann verhält es sich genauso. Soweit ich dein Vorhaben verstehe, hast du vor die Schleife solange auszuführen, wie languageCode nicht "en" oder "de" ist. Dann müsste die Abfrage so aussehen:

    (selectedLanguage != "de" && selectedLanguage != "en")

    bzw so hier:

    (!selectedLanguage.Equals("de") && !selectedLanguage.Equals("en"))

    Du musst also abfragen, ob der Wert nicht "de" und nicht "en" ist. Wenn du es trotzdem über ODER machen willst, dann würde dieser Code funktionieren:

    (!(selectedLanguage == "de" || selectedLanguage =="en"))

    bzw. swieder mit Equals:

    (!(selectedLanguage.Equals("de") || selectedLanguage.Equals("en")))

    Hierbei wird überprüft, ob selectedLanguage "de" oder "en" ist und das Ergebnis wird dann negiert.

    Am besten ist es, dan du mal in die bedingung hinein klickst und F9 drückst. Dadurch wird ein BreakPoint gesetzt und der Code wird bei der Ausführung dort angehalten. Dadurch kannst du das Ergebnis vbielleicht besser nachvollziehen.

    Vielleicht hast du auch mitbekommen, das ich einighe Klammern weg gelassen habe. Methoden muss man in C# nicht nochmal explizit einklammern, da diese sowieso schon Klammern enthalten.
    Außerdem habe ich auch noch die Varianten mit == und != aufgezeigt, welche eine kürzere Notation im Gegensatz zu Equals und Co. sind.

    PS: Es gibt hier im Forum die Möglichkeit Codeausschnitte mit Syntaxhighlightning zu belegen, dafür musst du auf den Code-Einfügen-Button klicken:


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Samstag, 31. August 2013 11:43
    Moderator
  • Vielen Dank,

    was soll ich sagen, die Kleinigkeiten sind es die das Leben interessant sind. Vielen herzlichen Dank für deine Hilfe. Jetzt funktioniert der Code ohne Fehler....

    LG Ralf

    Samstag, 31. August 2013 12:16