这个代码最好的写法是怎样的?
目的:
定义一个长度100的数组
以1-100随机填充到数组
不能有重复的值
以vb.net写
我的写法:
Dim t_num(99) As Integer
Dim u_num(99) As Integer
For i As Integer = 0 To 99
u_num(i) = i + 1
Next
Dim j As Integer = 0
Dim i_num As Integer
Do While j < 100
Randomize()
i_num = CInt(Int(10000 * Rnd()))
If i_num < 100 Then
If Not u_num(i_num) > 100 Then
t_num(j) = u_num(i_num)
u_num(i_num) = 101
j += 1
End If
End If
Loop
希望大家能给出更好的写法.
[解决办法]
先放到集合中,
再随机取出存入数组,直到集合count=0
[解决办法]
不知道那一个效率更高一些,你那个IF比较多,可能会慢一些,不过100个数,差别不大
Public Function RandomSort(ByVal iMax As Integer)
Dim arr() As Integer
Dim i As Integer, a As Integer, b As Integer, t As Integer
'定义一个iMax大小的数组
ReDim arr(iMax - 1)
'先按顺序添入数据 1 到 iMax
For i = 0 To iMax - 1
arr(i) = i + 1
Next i
'开始混合
'这里iMax可以修改,修改的越大,随即性越大,一般最好使用iMax的3倍,否则效果很
差
For i = 1 To iMax * 3
'随即选两个元素序号
a = Int(Rnd * (iMax))
b = Int(Rnd * (iMax))
'以下代码是把a元素和b元素进行交换
t = arr(a)
arr(a) = arr(b)
arr(b) = t
Next i
RandomSort = arr
End Function
[解决办法]
感觉66i88(66i88)的效果好。
------解决方案--------------------
两种方法:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim aa() As Integer
aa = GenRandom2(1, 111, 10)
End Sub
Private Function GenRandom1(ByVal RandomMin As Integer, ByVal RandomMax As Integer, ByVal GenNum As Integer) As Integer()
Dim aaa As New ArrayList
If RandomMax < RandomMin Then Return CType(aaa.ToArray(GetType(Integer)), Integer())
If (RandomMax - RandomMin) < (GenNum - 1) Then Return CType(aaa.ToArray(GetType(Integer)), Integer())
Do Until aaa.Count = GenNum
Dim tempint As Integer
Randomize()
tempint = Int((RandomMax - RandomMin + 1) * Rnd() + RandomMin)
If Not aaa.Contains(tempint) Then aaa.Add(tempint)
Loop
Return CType(aaa.ToArray(GetType(Integer)), Integer())
End Function
Private Function GenRandom2(ByVal RandomMin As Integer, ByVal RandomMax As Integer, ByVal GenNum As Integer) As Integer()
Dim aaa As New ArrayList
Dim bbb As New ArrayList
If RandomMax < RandomMin Then Return CType(aaa.ToArray(GetType(Integer)), Integer())
If (RandomMax - RandomMin) < (GenNum - 1) Then Return CType(aaa.ToArray(GetType(Integer)), Integer())
Dim i As Integer
For i = RandomMin To RandomMax
aaa.Add(i)
Next
Dim Rdm As New Random()
For i = 0 To GenNum - 1
Dim current As Integer
current = Rdm.Next(0, aaa.Count - 1)
bbb.Add(aaa(current))
aaa.RemoveAt(current)
Next
Return CType(bbb.ToArray(GetType(Integer)), Integer())
End Function
End Class