C # wenn sonst, schalte, bool

7

Ich versuche, ein einfaches Text-Abenteuer zu programmieren. Als ich anfing, die Richtungen zu programmieren, die ein Benutzer betreten kann, erkannte ich, dass der Benutzer "Nordosten", "Südwesten" usw. eingeben konnte, also dachte ich, ich sollte Fälle für sie machen.

Mein Problem ist case5 "north east" wird nicht ausgeführt, wenn ich "north east" in die Befehlszeile eingabe.

%Vor%     
Charlie 08.07.2013, 08:13
quelle

4 Antworten

4

Während dies beantwortet wurde, würde ich meine eine Beobachtung machen:

Ihre booleschen Werte sind unnötig und helfen, das Problem zu verbergen.

Zum Beispiel:

%Vor%

ist das gleiche:

%Vor%

Was sollte es ziemlich offensichtlich machen, dass die Aussage 'input.Contains ("north") & amp; & amp; input.Contains ("east") wird niemals ausgeführt werden - da es 'input.Contains ("north') 'benötigt, um falsch zu sein (dank dem' else '). Debugging und Durchlaufen helfen hier sehr.

Also ja, als Programmierer ist es wahr, mit Ihrem Code prägnant zu sein - schreiben Sie nie mehr als Sie brauchen. In Ihrem Code haben Sie eine Reihe von Booleschen Werten, eine Menge von ifs und eine switch-Anweisung, die alle die gleiche Aufgabe erfüllen.

Ich würde es persönlich so schreiben:

%Vor%

Es ist genauso in Lesbarkeit und Verständlichkeit, aber beinhaltet ein Drittel der Zeilen und damit ein Drittel der Chance eines Fehlers.

    
NPSF3000 08.07.2013, 08:28
quelle
12

Da die Eingabe north enthält, also zuerst wenn if ausgeführt wird und nicht nach else if sucht, versuche inverse if's und gib case5 als erstes, wenn:)

%Vor%     
wudzik 08.07.2013 08:15
quelle
2

"Nordosten"

%Vor%     
awiebe 08.07.2013 08:17
quelle
1

Es kann nicht funktionieren, weil Sie "enthält Norden" als erste Frage fragen? Die Antwort ist ja. Sie gehen zu Schritt 1. Sie kommen nicht zu Schritt 5.

Um zu Schritt 5 zu gelangen, müssen Sie zuerst nachfragen.

Wie auch immer, es sieht so aus, als gäbe es mehr Probleme im Code. Ich bin mir nicht sicher, was Sie erreichen wollen, aber es sieht so aus, als würden Sie Dinge ohne Grund komplizieren.

Ich würde etwas Ähnliches wie folgt machen:

%Vor%     
user844541 08.07.2013 08:17
quelle