ReadLine - 数组索引超出范围

时间:2012-01-16 15:32:42

标签: c#-4.0

我一直在调试这个程序来查找错误但是无法成功。由于某种原因,它显示错误 - 数组索引超出此行的范围  move [nCount] .sDirection = sStep [0];我知道,这个论坛不是为了调试,我很抱歉。

      class Program
{
     struct move
    {
       public char sDirection;
       public int steps;
    }
    static void Main(string[] args)
    {
        int nNumOfInstructions = 0;
        int nStartX = 0, nStartY = 0;
        move[] moves = new move[nNumOfInstructions];


        nNumOfInstructions=Convert.ToInt32(Console.ReadLine());


        string sPosCoOrd = Console.ReadLine();
        nStartX = Convert.ToInt32(sPosCoOrd[0]);

        nStartY = Convert.ToInt32(sPosCoOrd[2]);

        string sStep = "";

        for (int nCount = 0; nCount < nNumOfInstructions; nCount++)
        {
            sStep = Console.ReadLine();
            int length = sStep.Length;
            moves[nCount].sDirection = sStep[0];
            moves[nCount].steps = Convert.ToInt32(sStep[1]);


        }


        Console.ReadLine();
    }
}

2 个答案:

答案 0 :(得分:1)

在您的代码中,moves数组被创建为零长度的数组。对于任何索引,访问此数组将不可避免地抛出一个超出范围的数组索引

答案 1 :(得分:1)

你可能想这样做:

class Program
{
    struct move
    {
        public char sDirection;
        public int steps;
    }

    static void Main(string[] args)
    {
        int nNumOfInstructions = Convert.ToInt32(Console.ReadLine());
        move[] moves = new move[nNumOfInstructions];

        string sPosCoOrd = Console.ReadLine();
        int nStartX = Convert.ToInt32(sPosCoOrd[0]);
        int nStartY = Convert.ToInt32(sPosCoOrd[2]);

        string sStep = String.Empty;

        for (int nCount = 0; nCount < nNumOfInstructions; nCount++)
        {
            sStep = Console.ReadLine();
            int length = sStep.Length;
            moves[nCount].sDirection = sStep[0];
            moves[nCount].steps = Convert.ToInt32(sStep[1]);
        }
    }
}