繁体   English   中英

为什么这个随机的Next()抛出异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM