2016-05-29 7 views
0

ボールの色をランダムに変更しようとしていますが、色変数を使用してソリッドブラシの色になります割り当てられていません。if/elseブロック内の変数を変更すると、割り当てられていないというエラーが表示される

xPos = xPos + GAP_SIZE; 
    int colour = rand.Next(1, 40); 
    Color ballColour; 
    if (colour >= 1 && colour <= 9) 
    { 
     ballColour = Color.Blue; 
    } 
    else if (colour >= 10 && colour <= 19) 
    { 
     ballColour = Color.Orange; 
    } 

    else if (colour >= 20 && colour <= 29) 
    { 
     ballColour = Color.Green; 
    } 
    else if (colour >= 30 && colour <= 39) 
    { 
     ballColour = Color.Red; 
    } 
    else if (colour == 40) 
    { 
     ballColour = Color.Purple; 
    } 
    SolidBrush ballColourBrush = new SolidBrush(ballColour); //This is the one that returns the error. 
    paper.FillEllipse(ballColourBrush, xPos, yPos, BALL_SIZE, BALL_SIZE); 
        xPos = xPos + BALL_SIZE; 

答えて

4

「未割り当てのローカル変数 『ballColour』の使用」のコンパイラdoesntのは、ballColourが割り当てられていないかもしれという警告されるように、あなたのif/elseブロックは、すべて込みであることを知っています。 if/elseブロックを更新せずにrand.Next(1, 40);に簡単に変更して、そうでないかもしれません。

対策1:

... 
else    //if (colour == 40) 
{ 
    ballColour = Color.Purple; 
} 

このコンパイラは、値は任意のために設定されている "見る" ことを可能と:他に使用してください:

Color ballColour = Color.White; 

対策2は何かに初期化しますすべての場合。

対処3:上記のすべて

初期第1の値に、コードを減らすために最初のテストをスキップ:

Color ballColour = Color.Blue; 

if (colour >= 10 && colour <= 19) 
... 
else  
{ 
    ballColour = Color.Purple; 
} 

Random.Next(min, max)第2 paramは排他あること値は決して40にはなりません。おそらく必要ですrand.Next(1, 41)

1

ここで問題となるのは、実行中にif条件が満たされず、以下のコード行を実行するときに変数 "ballColour"が割り当て解除される可能性があるということです。

SolidBrush ballColourBrush = new SolidBrush(ballColour);

+0

この答えは十分に細かいですが、それはすでに既存のものが少ないの説明と、言って正確に何と言います。あなたがなぜそれを追加したのかは分かりません。 –

関連する問題