首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在此代码中使用Do While循环/ While End While循环代替GoTo

如何在此代码中使用Do While循环/ While End While循环代替GoTo
EN

Stack Overflow用户
提问于 2020-02-18 21:50:53
回答 2查看 53关注 0票数 0

我是Visual Basic的新手,我正在尝试编写一个程序,它可以生成从1到9的随机数,而不会重复使用数组。我还读到,可以使用Do While循环或While End While语句,而不是使用GoTo语句(因为它们通常是不受欢迎的)。我试过使用这些循环,但没有成功。代码如下:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 22:07:38

这个想法是当你在数组中找到数字时循环:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-02-18 22:23:15

使用字典。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60282423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档