如何在数组指定索引区间内比较元素并返回最小值?
问题分析与代码修正
你的代码存在几个关键问题,导致无法正确实现指定索引区间内找最小值的功能:
- 循环起始位置错误:当前循环从
i=0开始,而非用户指定的起始索引,会遍历区间外的元素 - 未处理索引顺序:如果用户输入的起始索引大于结束索引,逻辑会完全错误
- 缺少输入验证:未校验用户输入的索引是否在0-3范围内,可能引发数组越界异常
修正后的代码
class Program { static int FindSmallestValue(int[] array, int startIndex, int endIndex) { // 确保起始索引小于等于结束索引 if (startIndex > endIndex) { (startIndex, endIndex) = (endIndex, startIndex); } int minimum = array[startIndex]; // 仅遍历指定索引区间内的元素 for (int i = startIndex; i <= endIndex; i++) { if (array[i] < minimum) { minimum = array[i]; } } Console.WriteLine("最小的值是 {0}", minimum); return minimum; } static void Main(string[] args) { int[] array = { 64, 28, 42, 37 }; int startIndex, endIndex; // 输入第一个索引并验证有效性 do { Console.WriteLine("输入第一个索引(0 至 3)"); } while (!int.TryParse(Console.ReadLine(), out startIndex) || startIndex < 0 || startIndex > 3); // 输入第二个索引并验证有效性 do { Console.WriteLine("输入第二个索引(0 至 3)"); } while (!int.TryParse(Console.ReadLine(), out endIndex) || endIndex < 0 || endIndex > 3); FindSmallestValue(array, startIndex, endIndex); } }
关键改进点
- 修正遍历范围:从用户指定的起始索引开始,仅遍历区间内的元素
- 索引顺序校正:自动交换起始/结束索引,避免因输入顺序错误导致逻辑失效
- 输入合法性校验:通过循环确保用户输入有效整数且在0-3范围内,杜绝数组越界异常
内容的提问来源于stack exchange,提问作者Samuel Kabraelian
相关产品推荐
相关产品推荐

