Как использовать Do Пока L oop / Пока Конец Пока L oop в этом коде вместо GoTo - PullRequest
0 голосов
/ 18 февраля 2020

Я немного новичок с Visual Basi c, и я пытаюсь создать программу, которая генерирует случайные числа от 1 до 9 без повторения, используя массивы. Я также читал, что вместо использования операторов GoTo (как их обычно осуждают) можно использовать «Делать пока L oop» или «Пока кончаются пока утверждения». Я пытался использовать эти циклы, но не сделал это работать. Вот код:

Dim x As Integer = 0, y As Integer = 0, num As Integer = 0, arr(8) As Integer
        lstLoop.Items.Clear()
        For x = 0 To 8 
Start:
            Randomize()
            num = Fix(Rnd() * 9) + 1
            For y = 0 To 8
                If num = arr(y) Then
                    GoTo Start
                End If
            Next
        arr(x) = num
        lstLoop.Items.Add(arr(x))
        Next

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Идея состоит в том, чтобы l oop, пока вы нашли число в массиве:

Sub GenerateRandom()

Dim x As Integer
Dim num As Integer
Dim arr(8) As Integer

Randomize Timer

For x = 0 To 8
    Do
        num = Fix(Rnd() * 9) + 1
    Loop While FindInArray(arr, x - 1, num)

    arr(x) = num
Next x

End Sub

Function FindInArray(arr() As Integer, maxIndex As Integer, num As Integer) As Boolean

Dim i As Integer
FindInArray = False

For i = 0 To maxIndex
    If arr(i) = num Then
        FindInArray = True
        Exit Function
    End If
Next

End Function
0 голосов
/ 18 февраля 2020

используйте словарь.

Sub test()
    Dim dic As Object
    Dim n As Integer
    Dim Num As Integer
    Set dic = CreateObject("Scripting.Dictionary")

    Do Until n = 9
        num = WorksheetFunction.RandBetween(1, 9)
        If dic.Exists(num) Then
        Else
            n = n + 1
            dic.Add num, num
        End If

    Loop
    Range("a1").Resize(1, 9) = dic.Keys
End Sub

или

Sub test()
    Dim dic As Object
    Dim Num As Integer
    Set dic = CreateObject("Scripting.Dictionary")

    Do Until dic.Count = 9
        num = WorksheetFunction.RandBetween(1, 9)
        If dic.Exists(num) Then
        Else
            dic.Add num, num
        End If
    Loop
    Range("a1").Resize(1, 9) = dic.Keys
End Sub
...