【问题标题】:How would I create this program?我将如何创建这个程序?
【发布时间】:2023-03-25 01:47:01
【问题描述】:

我必须编写一个循环来生成 4 个唯一数字。所以它会像 4- 2 - 5 - 7 并且它不能像 4 - 4 - 5- 7 因为 4 不是唯一的。只是我在循环中挣扎 我尝试在 YouTube 上学习循环 不知道如果我看到有人在这个概念中这样做,我会掌握 if 的窍门

【问题讨论】:

  • 在这里查看我的答案 (vba) stackoverflow.com/questions/34862663/…
  • 该代码根本没有帮助
  • 您的问题有 vba 标签,答案是 vba 格式。您可以修改逻辑以在 vb.net 中工作。
  • 本网站并非旨在为我们提供代码。我们可以帮助您纠正无效的代码。按照您认为应该的方式编写代码,如果它不起作用,请在此处发布该代码并解释您认为它应该做什么。
  • 当然,要编写工作代码,你必须知道它应该做什么。你?我不是在模糊的一般意义上谈论。我说的是分步细节。您应该能够准确地解释一个人必须遵循哪些步骤才能手动执行此任务。如果你不能,那么你甚至不知道任务需要什么。此外,这甚至不是编程问题。您应该写下您的代码需要实现的步骤列表。如果你没有,那么你真的没有尝试过,不管你怎么想。

标签: vb.net visual-studio-2010 basic


【解决方案1】:

有一种非常简单的方法可以不使用循环。

试试这个代码:

Dim rnd As System.Random = New System.Random()
Dim numbers As Integer() = _
    Enumerable.Range(1, 10).OrderBy(Function (n) rnd.Next()).Take(4).ToArray()

我用这段代码得到了这种结果:

8、3、2、6

您可以更改.Range(1, 10) 以选择您喜欢的任何数字范围,而.Take(4) 则只选择您喜欢的数字。


如果您想通过循环来执行此操作,那么这是一种相当有效的方法:

Dim rnd As System.Random = New System.Random()
Dim pallet As New List(Of Integer)
For i = 1 To 10
    pallet.Add(i)
Next
Dim selected = New List(Of Integer)()
For i = 0 To 3
    Dim j = rnd.Next(0, pallet.Count)
    selected.Add(pallet(j))
    pallet.RemoveAt(j)
Next

【讨论】:

    【解决方案2】:

    我只能假设您需要 4 个唯一的随机数字。有了这个假设,我们首先需要一个生成随机数的方法(借用自https://stackoverflow.com/a/2677819/3579199):

    Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
       Static Generator As System.Random = New System.Random()
       Return Generator.Next(Min, Max)
    End Function
    

    此方法将返回一个随机数,即 >= Min 和

    Dim count = 0
    Dim numbers(3) As Integer
    Do
        Dim randomNumber = GetRandom(1, 100)
        If(Array.Exists(numbers, Function(element)
                                      Return element.Equals(randomNumber)
                                  End Function))
            Continue Do 
        End If
    
       numbers(count) = randomNumber
       count += 1
    Loop Until count = 4
    

    【讨论】:

    • “此方法将返回一个 >= Min 且 = Min 和 Max 的随机数”。
    • 现在无法编译。
    • 这已经被清理和测试过了。我可能应该用工作代码回复,但我想我会给他一个开始的地方。
    • 这很有效。你知道它只会产生从 1 到 99 的数字吗?
    • 是的,但是您在回答中说它返回“1 到 100 之间的数字,包括在内”,但实际上它只返回 1 到 99。
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多