5

カードクラスから継承するトランプと呼ばれるクラスがあります。私はそれをchuckcardsというオブジェクトとしてインスタンス化しました。データ メンバーの 1 つに CARD ID があります。値に int を割り当てようとしています。クラス内で public と宣言されています。これがインスタンス化された方法です。

playingcards[] chuckcards = new playingcards[10];

これが私が値を割り当てようとする方法です。

for (int ctr = 1; ctr < 10; ctr++)
        {

            chuckcards[ctr].cardID =  ctr;

            temp++;
        }

私が得るエラーは

オブジェクト参照がオブジェクト インスタンスに設定されていません。

私は何が間違っているのか分かりませんか?各メンバーに値を割り当てるメソッドを作成できますか? もしそうなら、それは特定のことにとって苦痛になるでしょうが、私はそれを行うことができますか? それとも簡単な方法ですか?

4

5 に答える 5

7

を呼び出すとnew playingcards[10]、そのタイプのデフォルトを持つプレースホルダーのみが作成されます。これはnull参照タイプ用です。実際にトランプを新しくしてから使用する必要があります

    for (int ctr = 1; ctr < 10; ctr++)
    {
        chuckcards[ctr] = new playcards{cardID=ctr};
        temp++;
    }

オブジェクト初期化子を使用して、コードを 1 行に簡素化しました。

何が起こるかは次のとおりです。

var chuckcards = new playingcards[10];

結果は次のとおりです。

chuckcards[0] = null
...
chuckcards[9] = null

だから、あなたはできません

chuckcards[0].cardID

それは本当に

null.cardID

したがって、値を初期化すると、それ以降は参照が作成されます。

chuckcards[0] = new playingcards();
chuckcards[0].cardID = ctr;

に評価されます

[ref to playingcards].cardID

これは有効です

于 2013-04-24T13:18:07.923 に答える
5

トランプのインスタンスを保持するために 10 個のスロットの配列を定義しましたが、すべてのスロットはまだ null
です。ループに入る前に、すべてのスロットにインスタンスを追加する必要があります。

 chuckcards[0] = new  playingcards();

など..... (1,2,...9=最大インデックス)

最終的に、特定のスロットにインスタンスを割り当てたかどうかをループ内で確認できます

 for (int ctr = 0; ctr < 10; ctr++)
 {
    if(chuckcards[i] != null)
    {
        chuckcards[ctr].cardID =  ctr;
        temp++;
    }
 }

覚えておいてください、配列インデックスは 1 ではなく 0 から始まります

于 2013-04-24T13:18:21.077 に答える
4

chuckcards[ctr]オブジェクト インスタンスを指定する必要があります。

chuckcards[ctr] = new playingcards();
chuckcards[ctr].cardID = ctr;
于 2013-04-24T13:18:07.553 に答える
3

チャックカード[ctr]はnullです。インスタンス化する必要があります

playingcards[] chuckcards = new playingcards[10];

for (int ctr = 0; ctr < 10; ctr++)
{
   chuckcards[ctr] = new playingcards();
   chuckcards[ctr].cardID =  ctr;
}
于 2013-04-24T13:19:05.360 に答える
2

チャックカード [ctr] は null です。インスタンス化する必要があります。

for (int ctr = 1; ctr < 10; ctr++)
{
    chuckcards[ctr] = new playingcards();
    chuckcards[ctr].cardID =  ctr;
    temp++;
}

コードを減らすために、ID を必要とする別のコンストラクターを作成できます。次に、次のものがあります。

for (int ctr = 1; ctr < 10; ctr++)
{
    chuckcards[ctr] = new playingcards(ctr);
    temp++;
}
于 2013-04-24T13:23:25.657 に答える