Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Error : Use of unassigned local variable

The error is caused in the for loop :

for (i = 0; i < hand.Length; i++)
{
   Console.WriteLine(hand[i]);
}

I am trying to store the values to be able to display them at a later time. The writeline is there to help me make sure the code actually works as I intend it to.

The rest of the code for reference: *edit: added a line of code

enum house //variable type for the card type
{
    Spades, Hearts, Clubs, Diamonds
}

enum cards //variable type for the cards
{
    Joker, Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King
}

class Program
{
    static void Main(string[] args)
    {

        Random rnd;
        Random rnd2;

        int i;
        int random;
        int random2;

        String[] hand;

        house randomhouse;
        cards randomcard;

        //all declared variables

        Console.WriteLine("Your hand is made up of :");

        for (i = 0; i <= 6; i++)//does everything in the {} until i is equal to 6
        {

            rnd2 = new Random();
            random2 = rnd2.Next(0, 14);
            randomcard = (cards)random2; //selecting a random card from joker to king

            if (randomcard > (int)cards.Joker) //if the random card isn't a joker
            {
                rnd = new Random();
                random = rnd.Next(0, 4);
                randomhouse = (house)random;//selects a random card type

                Console.WriteLine(randomcard + " of " + randomhouse); //outputs the name of the card
                System.Threading.Thread.Sleep(1000);//wait 1 second before getting the new card
            }

            else
            {
                Console.WriteLine(randomcard);//outputs "Joker"
                System.Threading.Thread.Sleep(1000);//wait 1 second before getting the new card
            }

            hand = new String[i];//making a new array value for every loop
            hand[i] = randomcard.ToString();//adding randomcard to the array*

        } 

        Console.Clear();

        for (i = 0; i < hand.Length; i++)
        {
            Console.WriteLine(hand[i]);
        }

        Console.ReadKey();
    }
}
like image 268
ardox Avatar asked Apr 02 '14 13:04

ardox


1 Answers

The compiler can never be sure that hand is actually initialized. You should either initialize it earlier, or set it to null, so you bypass this compiler check.

So you could do this, but it is in fact bad practice! When changing your code you could end up with a NullReferenceException!

String[] hand = null;

You do know your code doesn't actually work, since you end up with one array in the end. I think you mean this:

hand = new String[6];

...

hand[i] = theValue;
like image 200
Patrick Hofman Avatar answered Oct 09 '22 00:10

Patrick Hofman