嗨,我是编程新手,正在阅读本书。这是其中一章的结尾处的练习。但我的代码抛出了这个异常。
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]);
}
这是错误:
答案 0 :(得分:5)
numbers
为空,因此任何索引都无效。使用numbers.Add
添加数字,或者更好地使用预先设置的数组。此处不需要使用List
。数组很好,因为最终的大小是已知的。它也更快,虽然这似乎不是一个问题。
答案 1 :(得分:3)
ArgumentOutOfRangeException
仅在Random.Next
minValue 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()
,除非你向它添加项目
答案 2 :(得分:1)
您的号码列表还没有任何元素。
试试这个:
numbers.add(rand.Next(1, 1001));
答案 3 :(得分:1)
尝试
numbers.Add(rand.Next(1, 1001));
而不是
numbers[i] = rand.Next(1, 1001);
因此您可以拥有动态调整大小的列表。
您的列表在索引位置i
没有任何内容,因此您会收到ArgumentOutOfRangeException
。如果给定索引处存在某些内容,则只能通过索引访问集合中的项目。
答案 4 :(得分: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);
}