2016-06-29 2 views
0

Ich versuche, die case-Anweisung zu durchlaufen, wenn die Antwort falsch ist, aber die Anweisung bricht immer und ich bin nicht in der Lage zu loopen. Wie würde ich dieses Problem lösen?Wie umschlinge ich eine switch-Anweisung in C#

+2

In Ihrem Fall ist 'do..while()' Schleife besser. – Kason

+0

"Im Gegensatz zur while-Anweisung wird eine do-while-Schleife einmal ausgeführt, bevor der bedingte Ausdruck ausgewertet wird." https://msdn.microsoft.com/en-us/library/370s1zax.aspx – blins

+0

Würden Sie die Verwendung von if-Anweisungen hier betrachten? – Alexandru

Antwort

2

Das Schlüsselwort "break" bricht nur aus dem ersten Codeblock (Leerzeichen zwischen dem {...}) heraus, in dem es sich befindet. Die Unterbrechung Ihrer Schalter sollte Ihre while-Schleife nicht stören.

Das Problem ist, dass Sie keine Klammern nach Ihrer While-Schleife haben, so dass es nur in der Zeile direkt danach wirkt.

Unten ist wahrscheinlich, was Sie gesucht haben.

class Program 
{ 
    static void Main(string[] args) 
    { 
     string Studentname; 
     string retry = "No"; 

     Console.WriteLine("What is the Student's name? "); 
     do 
     { 
      Console.WriteLine("What is the Student's name? "); 
      Studentname = Console.ReadLine(); 

      switch (Studentname) 
      { 
       case "George": 
        Console.WriteLine("Yes in the list"); 
        //Console.ReadLine(); 
        break; 
       case "Goblin": 
        Console.WriteLine("Yes in the list"); 
        //Console.ReadLine(); 
        break; 
       case "Peter": 
        Console.WriteLine("Yes in the list"); 
        //Console.ReadLine(); 
        break; 
       case "TJ": 
        Console.WriteLine("Yes in the list"); 
        //Console.ReadLine(); 
        break; 
       default: 
        Console.WriteLine("Not in the list"); 
        Console.WriteLine("Would you like to retry?"); 
        retry = Console.ReadLine(); 
        break; 
      } 
     } while (retry != "No"); 
    } 
} 

EDIT: Ihre While-Schleife wurde auch nie eingegeben. Sie setzen "retry" auf "No" und prüfen, ob es nicht "No" ist. Um das Problem zu lösen, können Sie entweder eine "do ... while()" - Schleife verwenden, die immer mindestens einmal wiederholt wird, oder Sie können die erste Zuweisung von "retry" auf "Nein" setzen.

EDIT 2: @Kason ist korrekt. Ich wusste nicht, dass dein eigentliches Ziel war, zu gehen, wenn der Name gefunden wurde. Wenn das der Fall ist, dann ist ein "do ... while()" die beste Option.

+1

Wenn der Anfangswert für den Wiederholungsversuch Nein ist, kann der Code in der Schleife nicht ausgeführt werden. – Kason

+0

Gute Punkte, ich habe nicht wirklich die Logik betrachtet, nur gesehen, dass die Klammern in der While-Schleife fehlten. Es sollte jetzt gut sein. –

+0

Ich denke, Sie sollten auch die Console.Readline() aus der switch-Anweisung entfernen. Ich denke nicht, dass sie irgendeinen Zweck erfüllen - außer dem im Standardzweig. – failedprogramming

0

Stattdessen könnten Sie diese einfache LINQ-Methode verwenden:

string Studentnames[] = new string[] 
{ 
    "George", 
    "Goblin", 
    "Peter", 
    "TJ" 
} 

while (retry != "No") 
{ 
    if (Studentnames.Contains(Studentname) 
    { 
     Console.WriteLine("Yes in the list"); 
     Console.ReadLine(); 
    } 
    else 
    { 
     Console.WriteLine("Not in the list"); 
     Console.WriteLine("Would you like to retry?"); 
     retry = Console.ReadLine(); 
    } 
} 

Aber es funktioniert nicht, weil Sie die {} für die while-Anweisung forgotton haben zu setzen.

+0

Der Ansatz ist gut, der Grund für jemanden, der die Stimme abgibt, ist vielleicht, dass Sie nicht erklären, warum der Code in der Frage – Kason

+0

nicht funktioniert. Okay, danke @Kason. –

0

Fügen Sie nach der Anweisung while eine linke geschweifte Klammer und am Ende des Codes eine passende geschweifte Klammer hinzu.

0

Es gibt keine geschweiften Klammern nach dem Anfang der while Schleife. Das bedeutet, dass die Anweisung while nur für die unmittelbar folgende Zeile gilt.

while (retry != "No") 
    Console.WriteLine("What is the Student's name? "); 

Wie bereits erwähnt, beginnt retry mit "Nein". Wenn also die while Bedingung ausgewertet wird, ist es falsch. Die folgende Zeile wird nie ausgeführt, da sie nur ausgeführt werden soll, wenn retry != "No".

Wenn Sie möchten, dass while auf einen Anweisungsblock angewendet wird, fügen Sie sie in geschweifte Klammern ein.

while (retry != "No") 
{ 
    //Everything inside these braces will execute if retry != "No". 
    //If it gets to the end and retry still != "No" then it will repeat. 
    //You'd most likely want to do something inside this loop sooner or 
    //later that changes retry to something else so that the loop can 
    //end. Or you can use "break" to exit the loop. 
}