增加和传递数组的长度#

时间:2017-03-19 10:13:39

标签: c# arrays

我有一项任务要求我们使用数组而不是列表。我现在有两个问题,一个是每次用户输入时,数组的长度,playerNumber,增加1,所以我需要它无限期,我还需要将数组发送回main方法。下面的代码只能运行一次,当我尝试输入第二个输入时程序崩溃。

        int x = 0;
        string answer = "yes";

        string[] playerNumber = new string[] {};
        while (answer == "yes")
        {
            Console.Write("Enter a number   :   ");
            string y = Console.ReadLine();
            playerNumber = new string[] { y };

            playerNumber[x-1] = y;
            x++;
            Console.Write("Enter another number   :   ");
            answer = Console.ReadLine();

            Console.WriteLine();
        }

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你想要做什么。 首先,您的索引超出范围。 你在做:playerNumber[x-1],但是x == 0,所以你得到了一个例外。这是您的代码失败的唯一原因。请注意,将++x;一行排除也会让您失望,因为在第二个循环中,playerNumber又是一个大小为1的数组,但x值现在为2 ,你的再次出界。

其次,你在while循环的内部和内部初始化你的数组。你没有使用外部初始化(也许不需要内部初始化 - 再次,取决于你想要实现的目标)。

第三,您应该向用户提供正确的说明:如果您希望answeryesno,请在Console.Write中指定。

因此,如果我设法猜测您要尝试做什么,这里的代码会有一些更改,包括Array.Resize的使用(在此上下文中非常低效),并按照你的要求返回数组:

using System;

public class Test
{
    public static string[] MyFunc()
    {
        int x = 1;
        string answer = "yes";

        string[] playerNumber = new string[x];
        while (answer == "yes")
        {
            Console.Write("Enter a number   :   ");
            string y = Console.ReadLine();

            playerNumber[x-1] = y;
            x++;
            Array.Resize(ref playerNumber, x);

            Console.Write("Would you like to enter another number? (yes/no)");
            answer = Console.ReadLine();

            Console.WriteLine();
        }

        return playerNumber;
    }

    public static void Main()
    {
        Console.WriteLine(MyFunc()[0]); // prints the first string

    }
}