Benutzer mit den meisten Antworten
Konsolenprogramm wertet ODER nicht aus

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
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)
trueWenn 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.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 31. August 2013 12:44
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Samstag, 31. August 2013 13:59
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)
trueWenn 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.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 31. August 2013 12:44
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Samstag, 31. August 2013 13:59