1
int PlayerAmount = 10;
int CurrentPlayer = 0;
Player[] player = new Player[PlayerAmount];

while (true)
{
    string Input;
    Console.WriteLine("What would you like to do?");
    Console.WriteLine("1. Create new player and score.");
    Console.WriteLine("2. Display Highscores.");
    Console.WriteLine("3. Write out to XML file.");
    Console.Write("Input Number: ");
    Input = Console.ReadLine();
    if (Input == "1")
    {
        if (CurrentPlayer >= PlayerAmount)
        {
            Console.WriteLine();
            Console.WriteLine("MAX AMOUNT OF PLAYERS HAS BEEN REACHED!");
            Console.WriteLine();
        }
        else
        {
            string PlayerName;
            string Score;

            Console.WriteLine();
            Console.WriteLine("-=CREATE NEW PLAYER=-");
            Console.Write("Player name: ");
            PlayerName = Console.ReadLine();
            Console.Write("Player score: ");
            Score = Console.ReadLine();

            //=========================================
            //THIS IS WHERE THE ERROR OCCURS===========
            //=========================================
            player[CurrentPlayer].Name = PlayerName;


            Console.WriteLine("Player \"" + player[CurrentPlayer].Name + "\" with the score of \"" + player[CurrentPlayer].Score + "\" has been created successfully!" );
            Console.WriteLine();
        }
    }
    else if (Input == "2")
    {
        Console.WriteLine("Displaying the highscores");
    }
    else if (Input == "3")
    {
        Console.WriteLine("Writing to XML file");
    }
    else
    {
        Console.WriteLine("INVALID INPUT");
    }
}

文字列コピーを使用しようとしましたが、同じエラーが発生します。コードで問題を指摘しましたが、プレーヤー名がコピーされている場所が表示されない場合は、次のように入力します。 "player [ CurrentPlayer] .Name = PlayerName; "

前もって感謝します

4

3 に答える 3

1

私には次のように見えます:

player[CurrentPlayer].Name

無効である。のインデックスにあるプレーヤーオブジェクトcurrentPlayerがnullでないことを確認してください。

配列を初期化すると、デフォルトではすべてのオブジェクトがnull(非プリミティブ)になります。したがって、配列内のインデックスごとに各プレーヤーをインスタンス化する必要があります。

この行:

Player[] player = new Player[PlayerAmount];

playerAmountサイズの配列(この場合は10) のみを割り当てます。

それらを初期化するためにこれが必要です:

for(int i =0; i < player.length;i++)  
{  
     player[i] = new Player();
}  
于 2012-12-26T22:33:30.183 に答える
1

Player配列の各メンバーを初期化することはありません。行った後:

Player[] player = new Player[PlayerAmount];

あなたもこれをしたいかもしれません:

for (int i = 0; i < PlayerAmount; i++)
{
    Player[i] = new Player();
}

事前に、配列には多数のnull参照のみが含まれているためです。

于 2012-12-26T22:36:34.993 に答える
0

また、怠惰なものを作ることができます

player[CurrentPlayer] = new Player();
player[CurrentPlayer].Name = PlayerName;
于 2012-12-27T00:09:02.347 に答える