如何将字符串数据存储到c#中的字符串数组

时间:2014-04-06 23:00:27

标签: c# arrays

我似乎无法解决的另一个愚蠢的家庭作业问题。我试图将用户输入字符串数据存储到字符串数组中但我收到的错误是"无法隐式转换类型"字符串"输入" int""尽管事实上我的代码中没有任何东西(据我所知)暗示它需要是一个int类型。我在方括号中的最后一行收到错误:playerNames [playerName] = playerName;

编辑:我知道我的变量和if语句搞砸了,一旦我弄清楚数组问题是怎么回事,我就会解决这个问题。

    static void InputData(string [] playerNames, int [] playerScore, ref int numPlayers)
    {
        int numberPlayers = 0;
        if (!numberPlayers.Equals("Q"))
            for (numPlayers++; numPlayers < 100;)
                Console.WriteLine("Enter the name of the player...Enter \"Q to exit...");
                string playerName = Console.ReadLine();
                playerNames [playerName] = playerName; 

编辑:这是我为此部分解析的代码         static void InputData(string [] playerNames,int [] playerScores,ref int numPlayers)         {             string playerName;

        for (int i = 0; i != numPlayers; i++)
            {
                Console.WriteLine("Enter the name of the player...Enter \"Q to exit...");
                playerName = Console.ReadLine();
                if (!playerName.Equals("Q"))
                    Console.WriteLine("No further user input needed...\n");
                else
                    playerNames[i] = playerName;
                    Console.WriteLine("Enter the score of the player...");
                    int playerScore = Convert.ToInt32(Console.ReadLine());
                    playerScores[i] = playerScore;

我的下一个问题是,下面的用户建议数组存储整数。我必须存储多达100个玩家名称和100个玩家分数。你们有什么建议吗?

4 个答案:

答案 0 :(得分:2)

这是不正确的:

playerNames [playerName] = playerName

因为playerName是一个字符串,不能用作数组的索引。

你的意思是:

playerNames [numPlayers] = playerName

答案 1 :(得分:1)

当numberPlayers引用int

时,这不起作用
!numberPlayers.Equals("Q")

...因为“Q”不是int

答案 2 :(得分:1)

基本for循环应如下所示:

for (int i = 0 ; i != numPlayers ; i++) {
    Console.WriteLine("Enter the name of the player...Enter \"Q to exit...");
    string playerName = Console.ReadLine();
    playerNames [i] = playerName;
    ... // The rest of your loop goes here
}

这假设有固定数量的玩家。如果您想使其可展开,请为名称设置List<string>,为分数设置List<int>。更好的是,在课堂上结合名称和分数。

您的函数的签名假定将展开两个数组。虽然这在.NET中是可行的,但它并不是常规的。

以下是我如何在不为玩家引入新类的情况下更改您的功能:

static void InputData(List<string> playerNames, List<int> playerScore) {
    // The caller is assumed to have assigned non-null lists to the two arguments
    int i = 0;
    while (true) {
        Console.WriteLine("Enter the name of the player...Enter \"Q to exit...");
        string playerName = Console.ReadLine();
        if (playerName == "Q" || playerName == "q") break;
        playerNames.Add(playerName);
        ... // The rest of your loop goes here
    }
}

如果预先分配100个项目的数组,请按如下所示更改代码:

numPlayers = 0;
while (numPlayers = 0 ; numPlayers < 100 ; numPlayers++) {
    Console.WriteLine("Enter the name of the player...Enter \"Q to exit...");
    string playerName = Console.ReadLine();
    playerNames[numPlayers] = playerName;
    ... // The rest of your loop goes here
}

答案 3 :(得分:1)

错误在此行

playerNames[playerName] =playerName.

PlayerNames是一个字符串类型数组,要访问该数组的元素,您必须提供一个整数值,并提供一个字符串值。

playerNames[int type value here] =playerName