0

嗨,我是编程新手,正在研究这本书。这是其中一章末尾的练习。但是我的代码抛出了这个异常。

        Random rand = new Random();
        List<int> numbers = new List<int>();

        for (int i = 0; i < 1000; i++)
        {
            numbers[i] = rand.Next(1, 1001);
        }

        for (int i = 0; i < numbers.Count; i++)
        {
            listBox1.Items.Add(numbers[i]);
        }

这是错误: 在此处输入图像描述

4

5 回答 5

5

numbers为空,因此任何索引都无效。要么用于numbers.Add添加数字,要么更好地使用预先确定大小的数组。List这里不需要使用 a 。数组很好,因为最终大小是已知的。它也更快,尽管这在这里似乎不是问题。

于 2013-10-14T10:38:14.227 回答
3

ArgumentOutOfRangeException仅在根据以下情况调用Random.NextminValue is greater than maxValue.http: //msdn.microsoft.com/en-us/library/2dx6wyd4.aspx#ddueExceptionsToggle

你的问题在于numbers[i]数字有零个元素,这意味着设置numbers[0] = random.Next(1, 1000);将返回一个,ArgumentOutOfRangeException因为还没有范围。numbers.Add(random.Next(1, 1000));改为使用

只是一个提示,当在数组类型对象中使用索引器(当你使用 时object[key])和 for 循环时,你应该始终使用数组长度作为 for 循环的上限,如下所示:

for(int i = 0; i < 1000 && i < numbers.Count(); i++){
    //Do stuff with i
}

在您的情况下,除非您向其中添加项目,否则循环永远不会发生,因为i它总是会更小numbers.Count()

于 2013-10-14T10:40:52.553 回答
1

您的数字列表中没有任何元素。

尝试这个:

numbers.add(rand.Next(1, 1001));
于 2013-10-14T10:38:08.033 回答
1

尝试

numbers.Add(rand.Next(1, 1001));

代替

numbers[i] = rand.Next(1, 1001);

所以你可以有一个动态调整大小的列表。

您的列表在索引位置没有任何内容,i因此您收到ArgumentOutOfRangeException. 如果给定索引处存在某些内容,则只能通过其索引访问集合中的项目。

于 2013-10-14T10:38:35.183 回答
1
Try with this 

列表

   Random rand = new Random();
                List<int> numbers = new List<int>();
                //int [] nums ;
                for (int i = 0; i < 1000; i++)
                {
                    //nums[i] = rand.Next(0, 1000);
                    numbers.Add(rand.Next(0,1000));
                    //numbers[i] = rand.Next(1, 1001);
                }

- - - - - - - - - - - - 或者 - - - - - - - - - - - - - -----------------

您也可以使用数组

大批

Random rand = new Random();
            List<int> numbers = new List<int>();
            int [] nums = new int [1000] ;
            for (int i = 0; i < 1000; i++)
            {
                nums[i] = rand.Next(0, 1000);                

            }
于 2013-10-14T10:57:09.313 回答