You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Basic数组冒泡排序遇System.IndexOutOfRangeException问题求助

解决VB冒泡排序的索引越界问题并实现数组显示功能

问题根源

你的代码里有几个关键错误导致索引越界和排序失效:

  • 索引变量用了Decimal类型:数组索引必须是整数,用小数类型会让循环范围计算出错,进而触发索引越界。
  • 循环边界用了数组元素值而非长度:index2=-67.9、index3=99.9完全搞错了逻辑,冒泡排序的循环边界应该基于数组长度来控制,而非数组里的具体数值。
  • 元素交换逻辑写错了:最后一步应该把临时值赋值给numbers(index1+1),你写成了覆盖numbers(index1),等于没完成交换。
  • 缺少数组输出代码:没有打印数组的逻辑,无法查看当前值和排序结果。

修正后的完整代码

Module BubbleSortDemo
    Sub Main()
        Dim temp As Decimal
        ' 索引变量必须用Integer类型,数组索引是整数
        Dim i As Integer, j As Integer
        Dim numbers = New Decimal() {7.3, 32.2, 4.8, 28.3, -6.8, 101.7, -67.9, 40.7, 6.9, 99.9}

        Console.WriteLine("排序前的数组:")
        PrintArray(numbers)

        ' 冒泡排序核心逻辑:外层循环控制排序轮数,共数组长度-1轮
        For i = 0 To numbers.Length - 2
            ' 内层循环控制每轮比较的次数,每轮结束后末尾i个元素已经有序,不需要再比较
            For j = 0 To numbers.Length - 2 - i
                If numbers(j) > numbers(j + 1) Then
                    ' 正确的交换逻辑
                    temp = numbers(j)
                    numbers(j) = numbers(j + 1)
                    numbers(j + 1) = temp
                End If
            Next j

            ' 可选:打印每一轮排序后的数组状态,查看排序过程
            Console.WriteLine(vbCrLf & $"第{i+1}轮排序后:")
            PrintArray(numbers)
        Next i

        Console.WriteLine(vbCrLf & "最终排序后的数组:")
        PrintArray(numbers)
        Console.ReadLine()
    End Sub

    ' 封装打印数组的方法,避免重复代码
    Private Sub PrintArray(arr As Decimal())
        For Each num In arr
            Console.Write(num & " ")
        Next
        Console.WriteLine()
    End Sub
End Module

代码说明

  1. 把索引变量改成Integer类型,确保循环范围准确,不会出现小数索引导致的越界。
  2. 外层循环次数设为numbers.Length - 2(数组索引从0开始,最后一个元素不需要再参与比较)。
  3. 内层循环的结束位置是numbers.Length - 2 - i,每轮结束后末尾的i个元素已经是有序的最大值,无需再参与后续比较。
  4. 修正了交换逻辑,确保两个元素正确互换。
  5. 添加了PrintArray子过程,专门用来打印数组内容,能看到排序前、每轮排序后以及最终的结果。

运行这段代码后,你会在控制台看到数组的初始状态、每一轮排序后的变化,以及最终从小到大排好序的结果,不会再出现索引越界错误。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:23