2011-08-04 21 views
-1

誰かがこのループが機能しない理由を知ることができますか?私はC#の初心者です。ループは機能しませんか?

おそらく
while (move == "r" || move == "s" || move == "f") 
      { 
       Console.Write("\nEnter your move: "); 
       move = Console.ReadLine(); 


       switch (move) 
       { 
        case "r": 
         Console.Write("\nYou have reloaded, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        case "s": 
         Console.Write("\nYou have shielded, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        case "f": 
         Console.Write("\nYou have fired, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        default: 
         Console.Write("\nInvalid move, try again\n\n"); 
         break; 
       } 


      } 
+1

ような何かにあなたのwhile条件を変更するんキー(やめるために多分「Q」)を割り当てることができますか?それはループには入りませんか?それは止まらない?それは時期尚早に終了しますか?あなたはデバッグして、実際の移動の価値を見てみましたか? –

+0

ループしませんが、Raselの答えはとてもうまく機能しました –

答えて

3

動きは、ループ内で初期化され、私はその初期化されていないと仮定しているループの前にコードを見ることができないので、おそらくnullまたは空の文字列ですので。

私の提案は、あなたが彼の答えを受け入れることを提案、そのよう

bool done = false; 
while (!done) 
{ 
    // do work 
    if (move == finalMove) // or whatever your finish condition is 
     done = true; // you could also put this as a case inside your switch 
} 
+0

移動は初期化されず、ユーザーがr、s、またはfと異なるものを入力すると、whileループも終了します。ループを継続したい場合は、条件で期待する値のいずれかに移動を設定して、デフォルトのケースを処理します。 – Icarus

+0

人が無効な移動を入力すると、エラーを報告するのではなく停止するだけなので、ロジックの一部である可能性があります。 –

+0

なぜそれが表示されているのかわかりません。「無効な移動、再試行」の代わりに「ああ、あなたはばかだよ、さようなら」ですか?彼は "q"オプションを追加し、 "q"などのループを終了する必要があります。 – Icarus

1

イエスは右であるとして設定されているブールフラグを使用することです。コードを書き換える方法は次のとおりです。

do 
      { 
       Console.Write("\nEnter your move: "); 
       move = Console.ReadLine(); 


       switch (move) 
       { 
        case "r": 
         Console.Write("\nYou have reloaded, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        case "s": 
         Console.Write("\nYou have shielded, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        case "f": 
         Console.Write("\nYou have fired, press enter for Genius"); 
         Console.ReadLine(); 
         break; 
        default: 
         Console.Write("\nInvalid move, try again\n\n"); 
         break; 
       } 


      } 
while (move == "r" || move == "s" || move == "f"); 

注しかし、あなたが「R」、「S」、または「F」以外の何かを得る場合は、Invalid move, try againを印刷して、(彼らはもう一度試してすることはできません)あなたのループを終了すること。あなたは代わりに何を意味する「動作しない」ループを終了し、

while (move != "q"); 
+0

ああ、それ以外の方法では、無効な移動はループを開始します。私はちょうど==に変えるよ!=、ありがとう –

関連する問題