我正在尝试为数组添加分数并检查该分数是否高于其余分数,并将其置于正确的位置并将其他所有内容向下移动。我有一个二维数组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
答案 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