[英]Why does this random Next() throw an exception?
嗨,我是编程新手,正在从本书中学习。 这是其中一章末的练习。 但是我的代码抛出了这个异常。
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]);
}
这是错误:
numbers
为空,因此任何索引均无效。 要么使用numbers.Add
添加数字或更好的使用预大小的数组。 此处无需使用List
。 数组很好,因为最终大小是已知的。 它也更快,尽管在这里似乎不是问题。
当minValue is greater than maxValue.
时,仅在Random.Next
调用ArgumentOutOfRangeException
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()
除非您向其中添加项目
您的号码列表中有任何内容。
尝试这个:
numbers.add(rand.Next(1, 1001));
尝试
numbers.Add(rand.Next(1, 1001));
代替
numbers[i] = rand.Next(1, 1001);
因此您可以拥有一个动态调整大小的列表。
您的列表在索引位置i
上没有任何内容,因此您收到ArgumentOutOfRangeException
。 如果给定索引中有项目,则只能通过其索引访问集合中的项目。
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);
}
- - - - - - - - - - - - 要么 - - - - - - - - - - - - - -----------------
您也可以使用Array
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.