如何在VB.NET中查找排序数组的第二小值(附实现代码)
VB.NET 实现已排序数组第二小值查找
目标:在VB.NET中实现已排序数组第二小值的查找功能。
实现步骤
- 启动程序
- 为数组赋值,接收用户输入的数组元素
- 调用内置Sort方法对数组元素做升序排序
- 在排序后的数组中定位第二小的值
- 输出排序后的完整数组,以及查找到的第二小值
- 终止程序运行
问题修正与代码实现
你贴的原始代码有两个问题,既跑不通也出不了正确结果:
- 索引越界问题:VB.NET数组索引从0开始,不存在
n(-1)这个元素,该行代码运行时会直接抛出索引超出范围的异常 - 查找逻辑错误:既然已经调用
Array.Sort()完成了数组升序排序,数组元素已经按从小到大顺序排列,不需要额外遍历做比较,直接取索引为1的元素就是第二小值;原始代码的遍历逻辑在升序数组中永远不会触发判断分支,最终输出的永远是初始赋值的0,结果完全错误。
修正后的可正常运行的代码如下:
Module Module1 Sub Main() ' 声明长度为11的整数数组,索引范围0-10 Dim n(10) As Integer Dim i As Integer ' 循环接收用户输入的11个数组元素 For i = 0 To 10 Console.WriteLine("请输入数组索引[{0}]对应的元素值:", i) ' 加容错处理,避免用户输入非整数导致程序崩溃 Integer.TryParse(Console.ReadLine(), n(i)) Next i ' 输出原始数组 Console.WriteLine("===== 原始数组 =====") For i = 0 To 10 Console.WriteLine("数组元素({0}) = {1}", i, n(i)) Next ' 对数组做升序排序 Console.WriteLine("===== 按从小到大排序后的数组 =====") Array.Sort(n) For Each num As Integer In n Console.WriteLine(num) Next ' 升序排序后,索引0存最小值,索引1存第二小值 Dim secondSmall As Integer = n(1) Console.WriteLine("数组中第二小的元素是:{0}", secondSmall) Console.ReadKey() End Sub End Module
补充说明:
- 上述代码默认数组长度≥2,如果需要适配长度不足2的场景,可以提前加个数组长度判断,给出对应提示避免报错
- 如果业务要求第二小值是严格大于最小值的数(即存在多个和最小值相等的重复元素时要跳过重复项),可以在排序后从索引1开始遍历,找到第一个和n(0)不相等的元素作为结果即可。
内容的提问来源于stack exchange,提问作者MohamedAbdulAziz44
相关产品推荐
相关产品推荐

