用VB.net编写的基本姓名排序程序
我的老师指导我们班用VisualBasic中的“老式方式”创建一个基本的单词排序程序。因此,比较两个数组值a和b,如果一个被认为比另一个更高,则交换它们,如果不进行任何操作,则继续,直到没有更多的交换。以下是我目前掌握的代码:用VB.net编写的基本姓名排序程序,vb.net,sorting,Vb.net,Sorting,我的老师指导我们班用VisualBasic中的“老式方式”创建一个基本的单词排序程序。因此,比较两个数组值a和b,如果一个被认为比另一个更高,则交换它们,如果不进行任何操作,则继续,直到没有更多的交换。以下是我目前掌握的代码: Imports System.IO Imports System Public Class Form1 Public arrText As New ArrayList() Private Sub btnImprt_Click(se
Imports System.IO
Imports System
Public Class Form1
Public arrText As New ArrayList()
Private Sub btnImprt_Click(sender As Object, e As EventArgs) Handles btnImprt.Click
'Dim OpenAnswerFile As New OpenFileDialog
Dim objReader As New StreamReader("c:\Users\Adam\Desktop\unSortList.txt")
Dim sLine As String = ""
Dim arrText As New ArrayList()
Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine)
End If
Loop Until sLine Is Nothing
objReader.Close()
Dim i As Integer = 0
txtImport.Text = arrText(i)
End Sub
Private Sub btnSort_Click(sender As Object, e As EventArgs) Handles btnSort.Click
Dim i As Integer = 0
Dim a As Integer = i + 1
txtImport.Text = i
txtImport.Text = a
Dim Temp As String
Dim Change As Boolean = True
While Change = True
Change = False
For Each i In arrText(i) - 1
If String.Compare(arrText(i), arrText(i + 1)) = 1 Then
Change = True
Temp = arrText(i)
arrText(i) = arrText(i + 1)
arrText(i + 1) = Temp
End If
Next
i = 0
End While
txtSort.Text = arrText(39)
End Sub
我的问题是,我得到了一个索引错误,我不确定错误在哪里,因为逻辑似乎很好
是的,我知道Visual Basic中内置的排序功能。但正如老师所说。没有作弊。您的代码有几个缺陷,我忽略了这些缺陷,只关注排序部分,因为您的查询与此相关。将排序循环替换为以下内容,然后再次检查。基本问题是,循环应该只迭代到
List.Count-2
,而不是List.Count-1
,因为您在循环内比较List(i)
和List(i+1)
:
Dim Temp As String
Dim Change As Boolean = True
While Change
Change = False
For i = 0 To arrText.Count() - 2
If String.Compare(arrText(i), arrText(i + 1)) = 1 Then
Change = True
Temp = arrText(i)
arrText(i) = arrText(i + 1)
arrText(i + 1) = Temp
End If
Next
End While
如果您使用调试器运行,您的工作会轻松得多(您应该这样做,除非特别禁止)。如果您在Visual Studio中,请在程序的开头添加一个断点,然后使用F11或“debug”菜单进入代码。我不打算直接给您答案,但请注意,您在类级别和方法级别声明了arrText,在btnSort方法中丢失了声明,第二个使用For循环,因为不能在For-Each循环中修改集合;第三个因为数组在.net中是基于零的,所以通常需要迭代到数组的长度减去1,但同时还要比较经过它的下一个值,你需要迭代到-2的长度,所以我已经清理了我糟糕的代码,并在这里实现了一些提示annnnddd。。。。。。它起作用了!虽然当它在第二个富文本框中输出答案时,大约有12行空白,所以我会看看问题出在哪里。谢谢你们!刚刚发现他给我们排序的文件下面有额外的白色文本。现在它工作得很好。