2016-04-22 1 views
2

Hier ist mein Code:wenn String Ist etwas nicht gleich

using System; 

namespace FirstProgram 
{ 
    class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine ("What is your first name?"); 
       String Name = Console.ReadLine(); 
      Console.WriteLine ("\nHi " + Name + "! Now tell me are you a boy or girl?"); 
       String Sex = Console.ReadLine(); 

      if (!Sex.Equals ("boy") || !Sex.Equals ("girl")) { 
       Console.WriteLine ("\nERROR: You were supposed to type 'boy' or 'girl'\nPress any key to exit..."); 
       Console.ReadKey(); 
       System.Environment.Exit (1); 
      } 

      Console.WriteLine ("\nOk so your name is " + Name + " and your are a " + Sex + "... Please tell me your age :)"); 
       int Age = Convert.ToInt32 (Console.ReadLine()); 
      Console.WriteLine ("\nYou are " + Age + " years old!"); 
      Console.ReadKey(); 
     } 
    } 
} 

Ich möchte nur wissen, warum das Programm beendet, obwohl ich „Junge“ oder „Mädchen“ eingeben, und wie kann ich dieses Problem beheben.

+2

Nun, für eine Sache müssen Sie die '||' in '&&' ändern – user1666620

Antwort

9

einfache Logik:

Sex != "boy" || Sex != "girl" 

wird immer wahr sein.

Sie müssen stattdessen

Sex != "boy" && Sex != "girl" 

verwenden.

Ein paar zusätzliche Hinweise:

  • C# Betreiber Überlastung unterstützt und es wird häufig verwendet, so dass Sie == und != für Streicher ganz gut verwenden können.
  • Verwenden Sie nicht Environment.Exit, nur return. Wenn Sie einen Fehlercode zurückgeben müssen, ändern Sie die Signatur Main in int Main() und return 1;. Beachten Sie jedoch, dass Anwendungen unter Windows davon ausgehen können, dass eine Anwendung, die einen Nicht-Erfolgscode zurückgegeben hat, auf irgendeine Weise fehlgeschlagen ist, und melden Sie sie - z. Total Commander öffnet eine Nachricht.
  • Verwenden Sie nicht \n. Verwenden Sie entweder Environment.NewLine, oder halten Sie sich einfach an für Endlinien.
  • Verwenden Sie string.Format zum Zusammensetzen komplexer Strings: string.Format("Your name is {0} and your age is {1}.", Name, Age). If you're on C# 6+, string interpolation is even nicer: $ ("Ihr Name ist {Name} und Ihr Alter ist {Age}.") `.
  • Ein Vergleich, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, könnte für Ihren Fall hilfreicher sein - Sex.Equals("boy", StringComparison.CurrentCultureIgnoreCase).
1

Die zulässigen Werte sind boy oder girl:

Sex.Equals ("boy") || Sex.Equals ("girl") 

Andere Werte sind nicht erlaubt:

!(Sex.Equals ("boy") || Sex.Equals ("girl")) 

Dann wird Ihr, wenn sein muss:

if ( !(Sex.Equals ("boy") || Sex.Equals ("girl"))) 
{ 
    ... 
    System.Environment.Exit(1); 
} 

Oder diese

if ( ! Sex.Equals ("boy") && !Sex.Equals ("girl"))) 
{ 
    ... 
    System.Environment.Exit(1); 
} 
4

Sie benötigen eine if-Anweisung von einer „OR“ zu einer „AND“ ändern:

if (!Sex.Equals ("boy") || !Sex.Equals ("girl")) 

Ein „OR“ Aussage wahr ergibt, wenn eine der Bedingungen gefüllt ist. Wenn Sie also "boy" eingeben, ist die zweite Anweisung, !Sex.Equals("girl"), wahr und führt den Code innerhalb der if-Anweisung aus.

Verwenden Sie stattdessen eine "AND" -Anweisung, die nur dann als wahr ausgewertet wird, wenn beide Argumente wahr sind.

if (!Sex.Equals ("boy") && !Sex.Equals ("girl"))