0

この問題はすでに数回発生しています。スイッチでインデックスを使用できないのはなぜでしょうか。配列 [インデックス] = null というエラーが表示されますが、その理由は何ですか?

// array of classes, im using public getters and setters to access the rank and cardcolor
Cardgame[] cardgame = new Cardgame[50];
int index = 0;
string CardColor = "";

...             

for (int i = 0; i < 4; i++)
{
    switch (i)
    {
        case 1: CardColor = "red";
            break;
        case 2: CardColor = "blue";
            break;
        case 3: CardColor = "diamond";
            break;
        case 4: CardColor = "candy!";
            break;
    }
    for (int x = 0; x <= 13; x++)
    {
        index++; 
     Cardgame[index].Color = CardColor;
        switch (x)
        {

            default: Cardgame[index].Number = x.ToString();
                break;
            case 11: Cardgame[index].Number = "Farmer";

                break;
            case 12: Cardgame[index].Number = "Queen";

                break;
            case 13: Cardgame[index].Number = "King";

                break;
        }
    }
4

3 に答える 3

3

Cardgameオブジェクトの配列があるためです。デフォルトの配列初期化子は、すべてのオブジェクトを null に設定します。あなたはcardgame[index] = new Cardgame()最初にする必要があります。

于 2013-08-12T23:04:16.537 に答える
1
// first define the possible values
var suits = new [] {"red", "blue", "diamond", "candy"};
var ranks = new [] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "farmer", "queen", "king"}

//var ranks = Enumerable.Range(1, 10).Select(n => n.ToString())
//                      .Concat(new [] {"farmer", "queen", "king"})
//                      .ToArray();

// given the known values, you just iterate over every possible index
for(int i = 0; i < suits.Length * ranks.Length; i++)
{
    Cardgame[i] = new CardGame();
    Cardgame[i].CardColor = suits[i % suits.Length];
    Cardgame[i].Number = ranks[i / ranks.Length];
}

// or some "harder" LINQ    
var Cardgame = (from s in suits
               from r in ranks
               select new CardGame(s, r)).ToArray();
于 2013-08-12T23:21:26.117 に答える
0

最初のループを 5 回反復し、毎回 14 枚のカードを反復しています...つまり、70 枚のカードです。

また、カードゲーム オブジェクトを初期化することはありません。

あなたがしたい:

for (int i = 0; i < 4; i++)
{
    ...
    for (int x = 0; x < 13; x++)
    {
        Cardgame[index] = new Cardgame();            
        ...
        index++;
    }
    ...
}
于 2013-08-12T23:04:31.973 に答える