我目前在尝试让我的程序使用2D数组时遇到一些麻烦。我之前使用一维阵列工作,但我现在完全迷失了,我必须做出这些改变。
以下是我目前拥有的2D数组和我认为可用于吐出字母等级的代码,但不会给我任何东西。谁能告诉我我做错了什么?
Private strGrades(,) As String = {{"900", "A"},
{"815", "B"},
{"750", "C"},
{"700", "D"},
{"0", "F"}}
Dim strGradeSearch As String
Dim intRow As Integer
strGradeSearch = txtGrade.Text
For intRow = 0 To 4
If intRow > strGrades.GetUpperBound(0) Then
strGrades(0, intRow) = strGradeSearch
intRow += 1
End If
Next intRow
If intRow <= strGrades.GetUpperBound(0) Then
lblLetter.Text = strGrades(intRow, 0)
End If
答案 0 :(得分:0)
请将以下所有内容作为正面评论: - )
行。看着你的代码,有几个问题。您正在尝试将字符串视为数字。虽然字符串可以包含看起来像数字的字符串,但它只包含恰好是数字的字符串。它们有意义使用,但对于计算机来说,它们并非如此。 VB经常在后台尝试让生活更轻松,但说实话,这可能是一种痛苦。
在比较等级之类的东西时,您需要比较实际数字,而不是包含数字的字符串。您可能会得到意想不到的结果。您需要让计算机将字符串转换为数字。见下文。
你的循环实际上什么都不做,因为If
语句永远不会执行它内部的代码,因为intRow
永远不会大于数组的最后一个元素。无论如何......向前。
将字符串转换为数字的方法是使用Val
函数,尽管这个&#34; old&#34; VB。目前的方法是使用Integer.Parse
。有关它的一些基本信息,请查看this link。
让我们一起走看你想做的事。
在文本框中获取字符串。
将字符串转换为数字。
循环遍历数组,并为每个元素获取存储为字符串的数字并将其转换为数字,然后将其与成绩编号进行比较。
如果等级大于任何值,请记下该等级 与成绩相关联的字母并停止搜索循环。
将找到的字母分配给标签。
以下代码应该执行此操作
Dim strGrades(,) As String = {{"900", "A"},
{"815", "B"},
{"750", "C"},
{"700", "D"},
{"0", "F"}}
Dim intGradeSearch As Integer
Dim strGradeLetter As String = ""
intGradeSearch = Integer.Parse(TxtGrade.Text)
For i As Integer = 0 To 4
If intGradeSearch >= Integer.Parse(strGrades(i, 0)) Then
strGradeLetter = strGrades(i, 1)
Exit For
End If
Next
LblLetter.Text = strGradeLetter
End Sub
在循环结束后你不需要检查intRow
,因为在这种情况下,在循环中的某个点,如果文本框中的数字大于或等于,则始终会找到成绩字母数组中的数字。
如果您有任何疑问,请不要犹豫。