FuzzyPanda
FuzzyPanda

Reputation: 53

Basic Name Sorting Program using VB.net

My teacher has instructed our class to create a basic word sorting program the 'old fashioned way' in visual basic. So comparing two array values, a and b, then if one is considered higher in the order than the other, swap them if not do nothing, continue until there are no more swaps. Here is the code I have so far:

   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

My problem is that I am getting an Index error and I'm not sure where the error is located as the logic seems fine.

And yes I am aware of the sorting function built into Visual Basic. but as the teacher said. No cheating.

Upvotes: 2

Views: 386

Answers (1)

dotNET
dotNET

Reputation: 35400

Your code has several flaws, which I'm ignoring and just concentrating on the sorting part, as your query is related to that. Replace your sort loop with the following and check again. The basic problem was that your loop should only iterate up to List.Count - 2 and not List.Count - 1 because you're comparing List(i) and List(i + 1) inside the loop:

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

Upvotes: 1

Related Questions