2017-02-12 14 views
0

コンソールの背景色をランダムな色に設定しようとしていますが、常にマゼンタが返されます。この問題を解決するために何を変更する必要がありますか。ありがとう!C# - 毎回マゼンタに設定するのはなぜですか?

using System; 

    namespace ConsoleApplication 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Random random = new Random(); 
      int randomInt = random.Next(0, 6); 
      while(randomInt < 7) 
      { 
       Console.BackgroundColor = ConsoleColor.Red; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Blue; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Cyan; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Green; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Red; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Yellow; 
       randomInt++; 
       Console.BackgroundColor = ConsoleColor.Magenta; 
       randomInt++; 
      } 
     } 
    } 
} 
+2

は、デバッガを使用してスルーステップ - あなたは、私が質問を理解していない、あなたの間違い... –

+0

が表示されるはずです - 'while'ループによって設定されます最後の色はマゼンタです。おそらく 'if'や' switch' 'case'のような別の構造を使いたいかもしれません。 – UnholySheep

+1

[Duffのデバイス](https://en.wikipedia.org/wiki/Duff% 27s_device)で、 'randomInt'は' while'の中の各命令の後に '<7'のために再評価され、' while'は自動的に終了します。それはどのように動作するのではありません。 – GSerg

答えて

3

あなたは私が信じているループの概念を誤解しています。あなたが使用するツールではないかもしれません。 色をランダム化するには、色を番号に関連付けてから番号を選択し、関連する色を選択する必要があります。

ConsoleColorは、各値がすでに数値に関連付けられていることを意味する列挙型です。 this questionに記載されている方法を使用して、列挙からランダムな値を選択できます。

列挙型から特定の色を特定したい場合は、独自の値の配列を作成し、その配列から値を選択する必要があります。

ここでは、配列からランダムな項目を選択する方法の例を示します。

Random random = new Random(); 
ConsoleColor[] colors = new ConsoleColor[] { ConsoleColor.Red, ConsoleColor.Blue }; 
var myRandomColor = colors[random.Next(0, colors.Length)]; 
0

実際には、すべての色と最後のマゼンタを設定しています。条件付きで色を設定する場合は、if文またはcase文を使用する必要があります。あなたはマゼンタassignmnentをコメントした場合、あなたは常に

 while(randomInt < 7) 
     { 
      Console.BackgroundColor = ConsoleColor.Red; 
      randomInt++; 
      Console.BackgroundColor = ConsoleColor.Blue; 
      randomInt++; 
      Console.BackgroundColor = ConsoleColor.Cyan; 
      randomInt++; 
      Console.BackgroundColor = ConsoleColor.Green; 
      randomInt++; 
      Console.BackgroundColor = ConsoleColor.Red; 
      randomInt++; 
      Console.BackgroundColor = ConsoleColor.Yellow; 
      randomInt++; 
      //Console.BackgroundColor = ConsoleColor.Magenta; 
      //randomInt++; //THIS WILL ALWAYS BE YELLOW 
     } 

黄色の背景を取得します私は何が必要なのcase文であることを考える:

switch(randomInt) 
{ 
    case 0: 
     Console.BackgroundColor = ConsoleColor.Red; 
     break; 
    case 1: 
     Console.BackgroundColor = ConsoleColor.Blue; 
     break; 
    ///....AND SO ON 
} 
-1

何も行うことができますことは、暗黙的にConsoleColorにint型を解析しています。このよう

:これにより

Console.BackgroundColor = (ConsoleColor)randomInt;

あなたrandomIntの範囲を変更する必要があります。 enumとConsoleColorのバックグラウンドコードを調べることをお勧めします。

+1

このコードはエラーが発生しやすいです。列挙に乱数が含まれていない場合はどうなりますか? –

関連する問題