2013-10-29 134 views
0

我应该添加到随机数字生成器编码,所以数字不会连续多次重复自己?Vb.net随机数字生成器重复相同的数字

我的随机数生成器看起来是这样的:

Dim rn As New Random 
TextBox1.Text = rn.Next(1, 4) 
If TextBox1.Text = 1 Then 
    Form4.Show() 
    Form4.Timer1.Start() 
End If 

If TextBox1.Text = 2 Then 
    Form7.Show() 
    Form7.Timer1.Start() 
End If 

If TextBox1.Text = 3 Then 
    Form8.Show() 
    Form8.Timer1.Start() 
End If 
+0

你的意思是你不想要sometthing像'1 2 2/3 1 1/2 3 3'和喜欢的东西'1 3 2/2 1 3/3 1 2'而不是? –

+0

是的,现在它的1 2 2/3 1 1/2 3 3 ...我想要1 3 2/2 1 3/3 1 2 ... – user2932903

+0

随机数字在这么小的范围内重复出现。你可以将最后一个数字存储为一个var,并且不断获得新的randoms,直到它不符合前一个。 – Plutonix

回答

0

要获得1至N(含),你可以使用下面的一个随机整数值。

CInt(Math.Ceiling(Rnd() * n)) 
+0

0到N之间 – NoChance

+0

不适合我... – user2932903

1

鉴于N(目前N = 3,但也可能是别的东西,像你说的),试图建立的1随机排列,...,N,然后在命令打开文本框这是生成的。请注意,这意味着您一次生成N个数字并全部使用它们,然后再生成N个数字。搜索“随机排列”来查找算法。

+0

这是要走的路。为了简单起见,您可以轻松地交换两个随机元素n/2次。 – user1120897

+1

这也叫做“Fisher-Yates”或“Knuth”洗牌。以我的答案为例。 –

1

移动你的随机实例,“RN”,出类(表)的水平所以它只被用于表一旦创建,并且同一个实例被反复使用:

Public Class Form1 

    Private rn As New Random 

    Private Sub SomeMethod() 
     TextBox1.Text = rn.Next(1, 4) 
     If TextBox1.Text = 1 Then 
      Form4.Show() 
      Form4.Timer1.Start() 
     End If 

     If TextBox1.Text = 2 Then 
      Form7.Show() 
      Form7.Timer1.Start() 
     End If 

     If TextBox1.Text = 3 Then 
      Form8.Show() 
      Form8.Timer1.Start() 
     End If 
    End Sub 

End Class 
+0

他不想重复任何号码 –

+0

修正了它!问题是我有两个Dim作为新随机,现在它工作正常。感谢您的帮助 – user2932903

0

如果你想每个数字只能使用一次,你需要做的是这样的:

Const FirstNumber As Integer = 1 
Const LastNumber As Integer = 5 

' Fill the list with numbers 
Dim numberList as New List(Of Integer) 
For i As Integer = FirstNumber To LastNumber Step 1 
    numberList.Add(i) 
Next i 

Dim rand as New Random() 
While numberList.Count > 0 
    ' draw a random number from the list 
    Dim randomIndex As Integer = rand.Next(0, numberList.Count - 1) 
    Dim randomNumber As Integer = numberList(randomIndex) 

    ' Do stuff with the number here   
    TextBox1.Text = randomNumber 

    ' remove the number from the list so it can't be used again 
    numberList.RemoveAt(randomIndex) 
End While 
+0

从OP中可以看出,这是否就像是一副扑克牌或掷骰子。 – dbasnett