-1

BubbleSort を実装しようとしています。ただし、配列の範囲外のエラーが発生します。これは 3 行目で発生します。誰かが私に何がうまくいかないのか説明できますか?

For i As Integer = 0 To marks.Length Step 1
    For x As Integer = 0 To marks.Length - 1 Step 1
        If marks(x) > marks(x + 1) Then <<< "this where the problem is" 
            temp = marks(x + 1)
            marks(x + 1) = marks(x)
            marks(x) = temp
        End If
    Next x
Next i
For a As Integer = 0 To marks.Length
    MsgBox(marks(a))
Next
4

1 に答える 1

0

オフバイワンの問題があるようです。x は 0 からmarks.Length-1になりますが、3 行目で を取得しようとしますmarks(x + 1)。ただし、 x がその最大値 に達するとすぐに、これは== ==marks.Length - 1と評価されます- これは実際には範囲外です。marks( x + 1 )marks( (marks.Length - 1) + 1 )marks( marks.Length )

2 行目のForループはmarks.Length - 2.
免責事項: この変更を行った場合でも、特殊なケースでもバブル ソートが正しく機能することを確認するテストを追加してください。そうでない場合は、アルゴリズムをさらに微調整する必要があるかもしれません。

于 2014-08-29T08:13:47.577 に答える