C#实现数组指定索引区间随机数填充,现有代码运行异常求助
问题排查与修复方案
代码核心错误点
- 循环逻辑完全错误:你把数组在a、b索引位置的值当成了循环遍历的上下限,而需求是遍历索引本身的区间。刚初始化的int数组所有元素默认值为0,你的循环判断
i < arry[b]本质是i < 0,循环根本不会执行。 - 未处理输入索引的大小顺序:如果用户输入的第一个索引大于第二个,直接用a、b作为上下限会导致循环无法启动。
- 输入变量顺序不符合直觉:你先读入的是b再读入a,用户按起始、结束索引顺序输入时会出现参数颠倒问题。
修正后的可运行代码
// 初始化长度为15的数组 int[] arry = new int[15]; // 读取用户输入的两个索引 Console.WriteLine("请输入第一个索引:"); int index1 = int.Parse(Console.ReadLine()); Console.WriteLine("请输入第二个索引:"); int index2 = int.Parse(Console.ReadLine()); // 调用填充方法 Filling(index1, index2, arry); static void Filling(int a, int b, int[] arry) { // 确定索引上下限,兼容输入顺序 int start = Math.Min(a, b); int end = Math.Max(a, b); // 边界校验,避免索引越界崩溃 if (start < 0 || end >= arry.Length) { Console.WriteLine("输入的索引超出数组范围!"); return; } Random rnd = new Random(); // 遍历从start到end的所有索引,<=end确保端点被包含 for (int i = start; i <= end; i++) { arry[i] = rnd.Next(3, 31); Console.WriteLine($"索引{i}的新值:{arry[i]}"); } }
优化说明
- 增加索引边界校验,避免用户输入超出0~14的范围导致程序崩溃
- 自动适配输入索引的顺序,不管用户先输入大索引还是小索引,都能正确生成区间内的随机数
- 循环条件调整为
i <= end,确保两个端点索引都会被赋值,符合需求
内容的提问来源于stack exchange,提问作者user13188123
相关产品推荐
相关产品推荐

