c#从用户输入填充数组,while循环,w / sentinel - IndexOutOfBounds错误

时间:2017-03-21 04:23:14

标签: c# arrays loops sentinel

我不明白为什么我一直得到一个IndexOutOfBounds异常。允许用户输入最多10个数字或-99的标记值。第10个数字引发错误。如果我编辑了数字。长度为数字。长度为-1,它不会抛出错误,但它只接受9个数字。有什么想法吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace SomeProggy
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = new int[10];
            int x = 0;
            string entryString = "";
            int counter= -1;



            while (numbers[x] != 10 && counter < numbers.Length && entryString != "-99")
            {                            
                Write("Enter up to 10 numbers > ");
                entryString = ReadLine();
                numbers[x] = Convert.ToInt32(entryString);
                x++;
                counter++;
            }


        }
    }
}

1 个答案:

答案 0 :(得分:1)

更改循环条件,以便首先检查数组长度:

while (counter < numbers.Length && numbers[x] != 10 && entryString != "-99")
{
     // ...
}

否则当x增加到10时,访问numbers[x]时它将超出范围。这将在counter < numbers.Length检查之前发生。