首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

这个代码最好的写法是怎样的?该怎么解决

2012-02-04 
这个代码最好的写法是怎样的?目的:定义一个长度100的数组以1-100随机填充到数组不能有重复的值以vb.net写

这个代码最好的写法是怎样的?
目的:
定义一个长度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


热点排行