以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 随机组合出现重复怎么办?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=81505)

--  作者:农村人
--  发布时间:2016/2/29 13:05:00
--  [求助] 随机组合出现重复怎么办?
使用如下代码;
Dim str() As String = {"1","2","3","4","5","6"}
For i As Integer = 1 To 200 \'组合次数
    Dim rnum1 As Integer = Rand.Next(str.Length)
    Dim rnum2 As Integer = Rand.Next(str.Length)
    Dim temp As String = str(rnum1)
    str(rnum1) = str(rnum2)
    str(rnum2) = temp
    Dim data As String = String.Join("", str)
    Output.Show(data)
Next

组合结果会出现多个重复,请问这如何解决?

--  作者:大红袍
--  发布时间:2016/2/29 14:46:00
--  
Dim str() As String = {"1","2","3","4","5","6"}
For i As Integer = 1 To 200
    For j As Integer = 1 To 5 \'洗牌次数
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    Output.Show(data)
Next

--  作者:农村人
--  发布时间:2016/3/1 14:49:00
--  
你好,这样仍然会出现重复的组合的
--  作者:大红袍
--  发布时间:2016/3/1 14:50:00
--  
 肯定有可能出现重复的,如果不想重复,就用集合记录一下之前的值。
--  作者:大红袍
--  发布时间:2016/3/1 14:53:00
--  
Dim str() As String = {"1","2","3","4","5","6"}
Dim ls As new List(Of String)
For i As Integer = 1 To 200
    For j As Integer = 1 To 5 \'洗牌次数
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    If ls.Contains(data) = False Then
        Output.Show(i & " " & data)
    Else
        i -=1
    End If
Next

--  作者:农村人
--  发布时间:2016/3/1 15:21:00
--  
Dim str() As String = {"1","2","3","4","5","6"}
Dim ls As new List(Of String)
For i As Integer = 1 To 200
    For j As Integer = 1 To 5 \'洗牌次数   ----这个代码主要起到什么作用的呢?
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    If ls.Contains(data) = False Then
        Output.Show(i & " " & data)
    Else
        i -=1
    End If
Next

--  作者:大红袍
--  发布时间:2016/3/1 15:23:00
--  
随机交换5次,打乱顺序。
--  作者:农村人
--  发布时间:2016/3/1 15:26:00
--  
非常感谢您的耐心解答,

Dim str() As String = {"1","2","3","4","5","6"}
Dim ls As new List(Of String)
For i As Integer = 1 To 200
    For j As Integer = 1 To 5 \'洗牌次数   ----这个代码主要起到什么作用的呢?
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    If ls.Contains(data) = False Then
        Output.Show(i & " " & data)
    Else
        i -=1
    End If
Next

仍然会出现重复

--  作者:大红袍
--  发布时间:2016/3/1 15:27:00
--  

 

Dim str() As String = {"1","2","3","4","5","6"}
Dim ls As new List(Of String)
For i As Integer = 1 To 200
    For j As Integer = 1 To 5 \'洗牌次数   ----这个代码主要起到什么作用的呢?
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    If ls.Contains(data) = False Then
        ls.add(data)
        Output.Show(i & " " & data)
    Else
        i -=1
    End If
Next


--  作者:农村人
--  发布时间:2016/3/1 16:37:00
--  
OK了,谢谢 大红袍

我现在需要再设置一个字符串,例如:"{"上","中","下","东","南","西","北"} 按照组合数量,有顺序地加入到循环组合,
Dim str() As String = {"1","2","3","4","5","6"}
Dim ls As new List(Of String)
For i As Integer = 1 To 100  \'组合数量
    For j As Integer = 1 To 5 \'洗牌次数  
        Dim rnum1 As Integer = Rand.Next(str.Length)
        Dim rnum2 As Integer = Rand.Next(str.Length)
        Dim temp As String = str(rnum1)
        str(rnum1) = str(rnum2)
        str(rnum2) = temp
    Next
    Dim data As String = String.Join("", str)
    If ls.Contains(data) = False Then
        ls.add(data)
        Output.Show(i & " " & data)
    Else
        i -=1
    End If
Next