2016-05-29 2 views
0

Ich versuche die Farbe eines Balls zufällig zu ändern, aber wenn ich versuche, die Farbe zu verwenden, wird die Farbe des festen Pinsels ist nicht zugewiesen. "Die Verwendung von nicht zugewiesenen lokalen Variablen 'ballColour'"Wenn ich eine Variable im If/Else-Block ändere, sagt ein Fehler, dass es nicht zugewiesen ist

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; 

Antwort

4

Der Compiler tut, dass Ihr if/else Block all-inclusive ist, so dass er warnt, dass ballColour nicht zugeordnet werden können. Eine einfache Änderung an rand.Next(1, 40); ohne Aktualisierung der if/else-Block und es kann nicht sein.

Abhilfe 1: Initialisieren etwas

Color ballColour = Color.White; 

Abhilfe 2: Verwenden Sie ein anderes:

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

Diese erlauben es dem Compiler zu "sehen" ein Wert für jede festgelegt ist und alle Fälle.

Abhilfe 3: Alle oben

Initialize auf den ersten Wert und überspringen die ersten Testcode zu reduzieren:

Color ballColour = Color.Blue; 

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

Hinweis dass die zweite param zu Random.Next(min, max)exklusiv ist , so dass der Wert nie 40 sein kann. Wahrscheinlich möchten Sie rand.Next(1, 41)

1

Das Problem hier ist, dass die Chance besteht, dass keine der if-Bedingungen während der Ausführung erfüllt ist und die Variable "ballColour" zum Zeitpunkt der Ausführung der unteren Codezeile nicht zugewiesen werden kann.

SolidBrush ballColourBrush = new SolidBrush(ballColour);

+0

Diese Antwort ist gut genug, aber es sagt genau das, was die bereits bestehenden sagt, mit weniger Erklärung. Nicht wirklich sicher, warum du es hinzugefügt hast. –

Verwandte Themen