如何向数组添加内容并将所有内容都移动下来?

时间:2018-02-15 16:07:26

标签: arrays vb.net sorting multidimensional-array

我正在尝试为数组添加分数并检查该分数是否高于其余分数,并将其置于正确的位置并将其他所有内容向下移动。我有一个二维数组highScores(9, 1),其中第一部分是每个分数,第二部分是0时的名称和1时的分数。我希望能够检查应该输入新分数的位置如果需要的话,然后将所有东西都移开。

这是我到目前为止所做的,但它不起作用。

Sub AddScore(name As String, score As String)

    For i = 9 To 0 Step -1

        If score > highScores(i, 1) Then

            For j = i To 1 Step -1

                highScores(j - 1, 0) = highScores(j, 0)
                highScores(j - 1, 1) = highScores(j, 1)

            Next

            highScores(i, 0) = name
            highScores(i, 1) = score

            Exit For

        End If

    Next

End Sub

1 个答案:

答案 0 :(得分:0)

我猜测元素9的分数是最高分,元素0的分数最低。

你很亲密,但并不完全。首先,你不应该对字符串进行数学比较。您应该将字符串转换为数字值。为此,有几种方法,但最简单的方法是使用Val函数。

下一步。想一想你想要实现的目标。从最低到最高的分数迭代检查分数,看它是否高于阵列中的任何分数。如果是,则将每个高分移动到下一个元素。这里的关键是要记住,元素0无处可去,它只会被上面的那个覆盖。因此,开始沿着数组从元素1到元素i,在那里你将放置新的分数。例如,元素1覆盖元素0,元素2覆盖元素1,依此类推。完成此操作后,您只需使用新值覆盖元素i

最后,不要使用Exit For,而是使用Exit Sub完全离开该子。 Exit For只会离开内部For..Next循环,然后尝试继续外循环。

Private Sub AddScore(name As String, score As String)
    For i As Integer = 9 To 0 Step -1
        If Val(score) > Val(highScores(i, 1)) Then
            For j As Integer = 1 To i 
                highScores(j - 1, 0) = highScores(j, 0)
                highScores(j - 1, 1) = highScores(j, 1)
            Next
            highScores(i, 0) = name
            highScores(i, 1) = score
            Exit Sub
        End If
    Next
End Sub