用VB.net编写的基本姓名排序程序

用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

我的老师指导我们班用VisualBasic中的“老式方式”创建一个基本的单词排序程序。因此,比较两个数组值a和b,如果一个被认为比另一个更高,则交换它们,如果不进行任何操作,则继续,直到没有更多的交换。以下是我目前掌握的代码:

   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行空白,所以我会看看问题出在哪里。谢谢你们!刚刚发现他给我们排序的文件下面有额外的白色文本。现在它工作得很好。