vb.net - 显示行显示索引超出范围
问题描述
有一个按钮通过在另一个数组中搜索输入来显示数组中的项目。在这种情况下,我想显示来自 animalArray 的项目。
为此,用户需要从 nameArray 中输入某个名称。二进制搜索,将比较输入和 nameArray(中间)。但是当所有这些都完成后,当使用列表框显示数组时,它会崩溃并说“索引超出了数组的范围”。即使所有数组中的所有项目都有 9 个项目,包括 0。
binarySearch(nameArray, animalArray, InputBox("Enter Owner name", "Owner name"))
如何解决这个问题?
Sub binarySearch(ByVal array1, ByVal array2, ByVal item)
Sort()
Dim low = 0
Dim high = 9
Dim middle As String
Dim subfindindex = -1
Do While low <= high And subfindindex = -1
middle = (low + high) \ 2
If array1(middle) = item Then
subfindindex = middle
Exit Do
End If
If middle > item Then
high = middle - 1
Else
low = middle + 1
End If
Loop
ListBox1.Items.Add(array2(subfindindex)) '<--- index was out of bounds of array
End Sub
解决方案
您的主要问题是您正在将数字与名称进行比较,并试图确定哪个更大:
If middle > item Then
相反,您需要将数字(middle
变量的值)与名称数组中的名称索引进行比较。
也就是说,通过使用列表而不是数组,以及通过描述性命名和强输入参数变量,您将获得更多的好处。这是工作代码:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Animals As New List(Of String)
Dim Names As New List(Of String)
Animals.Add("Dog")
Animals.Add("Cat")
Animals.Add("Sheep")
Animals.Add("Goat")
Animals.Add("Chicken")
Animals.Add("Fish")
Animals.Add("Cow")
Animals.Add("Snake")
Animals.Add("Rabbit")
Animals.Add("Squirrel")
Names.Add("Jim")
Names.Add("Betty")
Names.Add("Frank")
Names.Add("Paul")
Names.Add("Susan")
Names.Add("Debbie")
Names.Add("Bob")
Names.Add("Tina")
Names.Add("Fred")
Names.Add("Bill")
Me.BinarySearch(Names, Animals, InputBox("Enter Owner name", "Owner name"))
End Sub
Sub BinarySearch(Names As List(Of String), Animals As List(Of String), Name As String)
Dim SubFindIndex As Integer
Dim Middle As Integer
Dim High As Integer
Dim Low As Integer
SubFindIndex = -1
High = 9
Low = 0
Do While Low <= High And SubFindIndex = -1
Middle = (Low + High) \ 2
If Names(Middle) = Name Then
SubFindIndex = Middle
Exit Do
End If
If Middle > Names.IndexOf(Name) Then
High = Middle - 1
Else
Low = Middle + 1
End If
Loop
Me.ListBox1.Items.Add(Animals(SubFindIndex))
End Sub
End Class
但是有很多更简单的方法可以实现相同的目标:
Sub BinarySearch2(Names As List(Of String), Animals As List(Of String), Name As String)
Dim Animal As String
Dim Index As Integer
Index = Names.IndexOf(Name)
Animal = Animals(Index)
Me.ListBox1.Items.Add(Animal)
End Sub
- 编辑 -
在从列表中输入名称后,您应该看到以下内容InputBox
:
推荐阅读
- javascript - 我无法使用 Puppeteer 登录
- javascript - 苗条的自定义元素 createEventDispatcher 不起作用
- mysql - 以更短、更简洁的方法向表中插入许多值
- javascript - Vue 3 - 如何在没有 .value 的情况下使用反应式 ref 和计算?
- python - rcviz NameError:名称'node_data'未定义
- r - R中离散变量的直方图中奇怪的x轴
- python - 这个程序给了我一个循环导入错误,但仍然有效
- c - 分段错误(核心转储) - 指针
- java - android中的多个表
- python - Spark exectuors 找不到已安装的包