Vb.net 如何避免数字重复(所有数字应彼此不同)

Vb.net 如何避免数字重复(所有数字应彼此不同),vb.net,Vb.net,如何插入另一条指令以避免数字重复,因为所有六个数字应该彼此不同 以下是我的Visual Basic模块的代码: Module Loto Sub Main() Dim Value1, Value2, Value3, Value4, Value5, Value6 As Integer Console.WriteLine("Example 3: To generate six numbers from 1 to 40") Console.Wr

如何插入另一条指令以避免数字重复,因为所有六个数字应该彼此不同

以下是我的Visual Basic模块的代码:

Module Loto

    Sub Main()
        Dim Value1, Value2, Value3, Value4, Value5, Value6 As Integer

        Console.WriteLine("Example 3: To generate six numbers from 1 to 40")
        Console.WriteLine()

        'Initialize the random-number generator.
        Randomize()

        'Generate a random value between 1 and 40.
        'Int((HighestValue - LowestValue + 1) * Rnd) + LowestValue

        Value1 = CInt(Int((40 * Rnd()) + 1))
        Value2 = CInt(Int((40 * Rnd()) + 1))
        Value3 = CInt(Int((40 * Rnd()) + 1))
        Value4 = CInt(Int((40 * Rnd()) + 1))
        Value5 = CInt(Int((40 * Rnd()) + 1))
        Value6 = CInt(Int((40 * Rnd()) + 1))


        Do While (Value1 = Value2)
            Value2 = CInt(Int((40 * Rnd()) + 1))
        Loop

        Console.WriteLine("Random number generated is " & Value1)
        Console.WriteLine("Random number generated is " & Value2)
        Console.WriteLine("Random number generated is " & Value3)
        Console.WriteLine("Random number generated is " & Value4)
        Console.WriteLine("Random number generated is " & Value5)
        Console.WriteLine("Random number generated is " & Value6)

        Console.ReadLine()
    End Sub
End Module

创建一个数组1..40,获取一个随机数1..40,将该位置的值与位置(40)处的值交换,获取一个随机数1..39,并将该值与位置(39)交换。。。最后,你得到了位置35..40处的数字,创建一个数组1..40,得到一个随机数1..40,将该位置的值与位置(40)处的值交换,得到一个随机数1..39,并将该值与位置(39)交换。。。最后,你在35..40位置有数字,为你的答案创建一个数组,并在每一轮后检查:

dim resultArr(6) as integer
dim unique as boolean
for i=0 to 5 
  unique=false
  while not unique
    resultArr(i)=CInt(Int((40 * Rnd()) + 1))
    for j=0 to i-1
      unique=(unique OR resultArr(j)<>resultArr(i))
    next
  wend
next
dim resultArr(6)作为整数
dim-unique作为布尔值
对于i=0到5
唯一=错误
虽然不是唯一的
结果r(i)=CInt(Int((40*Rnd())+1))
对于j=0到i-1
unique=(unique或resultar(j)resultar(i))
下一个
温德
下一个

为您的答案创建一个数组,并在每一轮后检查:

dim resultArr(6) as integer
dim unique as boolean
for i=0 to 5 
  unique=false
  while not unique
    resultArr(i)=CInt(Int((40 * Rnd()) + 1))
    for j=0 to i-1
      unique=(unique OR resultArr(j)<>resultArr(i))
    next
  wend
next
dim resultArr(6)作为整数
dim-unique作为布尔值
对于i=0到5
唯一=错误
虽然不是唯一的
结果r(i)=CInt(Int((40*Rnd())+1))
对于j=0到i-1
unique=(unique或resultar(j)resultar(i))
下一个
温德
下一个

.NET提供了比传统VB更好的随机生成器。基本上,您希望创建一个值数组并交换它们,以便没有数字重复

这被称为洗牌,因为实际上你不是在挑选随机数,而是将一组值(如一副牌或一系列数字)放入一个随机的顺序中

Dim rValues(39) As Integer               ' random values holder
Dim rand = New Random()                  ' NET random generator - do this ONCE
Dim temp As integer
洗牌整数数组:

For ndx As Int32 = rValues.Length - 1 To 0 Step-1
  Dim r = rand.Next(n + 1)               ' next value

  temp = rValues(ndx)                    ' swap values
  rValues(ndx) = rValues(r)
  rValues(r) = temp
Next
如果用于一副卡片,则从
r值(0)
开始选择值,直到结束。要得到6分,就拿第一个,不会有重复


作为一种就地洗牌,它非常有效。

.NET提供了比传统VB更好的随机生成器。基本上,您希望创建一个值数组并交换它们,以便没有数字重复

这被称为洗牌,因为实际上你不是在挑选随机数,而是将一组值(如一副牌或一系列数字)放入一个随机的顺序中

Dim rValues(39) As Integer               ' random values holder
Dim rand = New Random()                  ' NET random generator - do this ONCE
Dim temp As integer
洗牌整数数组:

For ndx As Int32 = rValues.Length - 1 To 0 Step-1
  Dim r = rand.Next(n + 1)               ' next value

  temp = rValues(ndx)                    ' swap values
  rValues(ndx) = rValues(r)
  rValues(r) = temp
Next
如果用于一副卡片,则从
r值(0)
开始选择值,直到结束。要得到6分,就拿第一个,不会有重复


作为一种就地洗牌,它非常有效。

我喜欢上面提到的方向,即使用
随机
类,但可以使其更短:

Dim r As New Random
Dim a = Enumerable.Range(1, 40)
Dim b = a.OrderBy(Function() r.Next).Take(6)

我喜欢上面提到的方向,即使用
Random
类,但可以使其更短:

Dim r As New Random
Dim a = Enumerable.Range(1, 40)
Dim b = a.OrderBy(Function() r.Next).Take(6)
我的0.02美元

Private Shared prng As New Random

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim a As List(Of Integer) = (From x In Enumerable.Range(1, 40)
                                    Order By prng.Next Take 6).ToList


    For Each n As Integer In a
        Debug.WriteLine(n)
    Next
End Sub
我的0.02美元

Private Shared prng As New Random

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim a As List(Of Integer) = (From x In Enumerable.Range(1, 40)
                                    Order By prng.Next Take 6).ToList


    For Each n As Integer In a
        Debug.WriteLine(n)
    Next
End Sub

在代码中或在答案本身中使用伪代码会很有帮助,但除此之外,这确实是如何创建数字1到40的随机排列。在代码中或在答案本身中使用伪代码会很有帮助,但除此之外,这确实是如何创建数字1到40的随机排列。这是迄今为止最好的答案+1这是迄今为止最好的答案+1我认为您不需要在上面选择x。您也可以在
prng之后编写
Take 6
。下一步是
Take(6)
(避免混合查询和内联样式)。我认为您不需要在上面选择x
。您还可以编写
Take 6
,紧跟在
prng之后。下一步是
而不是
Take(6)
(以避免混合查询和内联样式)。