Выражение не метод - Bubble sort - PullRequest
       6

Выражение не метод - Bubble sort

0 голосов
/ 11 декабря 2018

Я пишу классическую пузырьковую сортировку в Visual Basic VB.NET и получаю сообщение об ошибке. Выражение BC30454 не является методом.Код сталкивается с проблемой, когда я начинаю сортировать вставленные номера в первом «Для».Я изменил Sub на Public и дважды проверил, что метод был напечатан правильно, но ничего не помогло.Что я пропустил?

Sub EE14()
    Dim j As Long, p As Long, n As Long, i As Long, Pole(100) As Long
    Dim s As String
    n = 0
    Do
        i = Val(InputBox("Write a number:"))
        If i <> 0 Then
            n = n + 1
            Pole(n) = i
        End If
    Loop Until i = 0
    For j = 0 To (n - 1)
        For i = 0 To (n - 1)
            If Pole(i) > Pole(i + 1) Then
                p = Pole(i)
                Pole(i) = Pole(i + 1)
                Pole(i + 1)
                Pole(i + 1) = p
            End If
        Next
    Next
    For i = 0 To n
        s = s & vbCrLf & Str(Pole(i))
    Next
    MsgBox(s)
End Sub

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Некоторые изменения, одним из которых является удаление количества разрешенных входов.Переместил сортировку к своему собственному методу.

Sub EE14()
    Dim i As Integer, n As Integer
    Dim Pole As New List(Of Long)
    Dim inp As Long
    Dim s As String
    Do
        s = InputBox("Add Number:")
        If Long.TryParse(s, inp) AndAlso inp > 0L Then
            Pole.Add(inp)
        End If
    Loop Until inp = 0L

    SortListOfLongs(Pole)

    Dim sb As New System.Text.StringBuilder
    For i = 0 To Pole.Count - 1
        sb.AppendLine(Pole(i).ToString)
    Next
    MsgBox(sb.ToString)
End Sub

Private Sub SortListOfLongs(LoL As List(Of Long))
    For j As Integer = 0 To LoL.Count - 1
        For i As Integer = 0 To LoL.Count - 2
            If LoL(i) > LoL(i + 1) Then
                Dim p As Long = LoL(i)
                LoL(i) = LoL(i + 1)
                LoL(i + 1) = p
            End If
        Next
    Next
End Sub
0 голосов
/ 11 декабря 2018

Спасибо, Крис Акридж,

Мой плохой, убрав полюса (я + 1), проблем нет.Код теперь работает правильно.

Sub EE14()
    Dim j As Long, p As Long, n As Long, i As Long, Pole(100) As Long
    Dim s As String
    n = 0
    Do                 
        i = Val(InputBox("Add Number:"))
        If i <> 0 Then
            n = n + 1
            Pole(n) = i
        End If
    Loop Until i = 0
    For j = 0 To (n - 1) 
        For i = 0 To (n - 1)
            If Pole(i) > Pole(i + 1) Then
                p = Pole(i)
                Pole(i) = Pole(i + 1)
                Pole(i + 1) = p
            End If
        Next
    Next
    For i = 0 To n
        s = s & vbCrLf & Str(Pole(i))
    Next
    MsgBox(s)
End Sub
...