C#向36长度数组插入去重随机数时出现IndexOutOfRangeException异常
错误原因
你触发索引越界异常的核心问题出在for循环的终止条件设置错误:
- C#中长度为36的数组,合法下标范围是
0 到 35,下标36已经超出了数组的可访问范围。 - 你写的循环条件是
r <= 36,循环变量r会从0一直跑到36,当r=36时执行Numbers[r] = nextValue就会触发越界异常。
修复方案
只需要把for循环的条件修改为r < 36即可,修复后的完整代码如下:
{ Random rand = new Random(); int[] Numbers = new int[36]; for (int r = 0; r < 36; r++) { int nextValue; do { nextValue = rand.Next(1, 50); } while (Numbers.Contains(nextValue)); Numbers[r] = nextValue; } return Numbers; }
可选优化说明
当前你用Numbers.Contains(nextValue)做去重校验的逻辑是正确的,不过如果后续要生成更多随机数,可以考虑用HashSet存储已生成的值,校验重复的时间复杂度会更低。
内容的提问来源于stack exchange,提问作者Deeroy
相关产品推荐
相关产品推荐

