【问题标题】:Random without repeating vb.Net随机不重复 vb.Net
【发布时间】:2017-11-30 22:58:45
【问题描述】:

我正在尝试制作一个小测验程序,从 20 个问题的数组中随机抽取 5 个随机问题而不重复任何一个问题 我搜索并发现我需要使用“Static”但它不起作用 我也试过 System.Random() 但它总是重复同样的问题 单击提交按钮时,我还需要有关表单加载和其他问题的初始问题,因此它们也不能重叠 有什么帮助吗?

【问题讨论】:

  • 与其让我们猜测哪里出了问题,为什么不发布您的代码以便我们告诉您哪里出了问题?我们无法从这里看到您的屏幕。同样从列表中随机选择并不意味着它们都不重复
  • 如果您的代码不起作用,那么您的代码就是错误的。如果我们看不到您的代码,那么我们就看不到它有什么问题。至于如何避免重复,答案应该是显而易见的。彩票如何避免选择重复号码?他们只是在选择后将它们从池中删除。为什么在这种情况下会有所不同?

标签: arrays vb.net random static


【解决方案1】:

您不需要随机数,而是需要随机排序的一系列数字。

假设你的问题只是简单的存储在一个字符串数组中,你可以使用 LINQ 的 OrderBy 对数字 1-20 进行随机排序,然后使用 LINQ 的 Take 随机排序后得到前 5 个数字。

看看这个例子:

Dim indices() As Integer = Enumerable.Range(0, questions.Length - 1).OrderBy(Function(i) r.Next()).Take(5).ToArray()

小提琴:Live Demo

【讨论】:

    【解决方案2】:

    这是我避免重复的尝试,但没有奏效 此代码应该从“pick”列表中选择一个随机值,然后从列表中删除该值

    Dim ind As New List(Of Integer)
     Dim pick As New List(Of Integer)
    
    For j = 0 To 13
                pick.Add(j)
            Next
            Dim randomvalue As Random = New System.Random
            Randomize()
            For j = 0 To 6
                Dim val = randomvalue.Next(pick(pick.Count - 1))
                ind.Add(val)
                pick.Remove(val)
            Next
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2015-11-30
      • 2020-05-13
      • 1970-01-01
      • 2012-07-19
      • 2010-11-16
      相关资源
      最近更新 更多