BlackJack牌组,洗牌

时间:2016-10-15 21:19:42

标签: vb.net

由于某些原因,在此代码中,我的s.Remove()无效。任何人都可以告诉我为什么并帮我提出解决方案吗?

Private Sub ShuffleDeck()
    Dim sb As New System.Text.StringBuilder
    Dim s As String = "23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA23456789bJQKA"
    For i As Integer = 1 To prng.Next(208, 208)
        Dim rndCard As String = prng.Next(0, s.Length)
        sb.Append(s.Substring(rndCard), 1)
        s.Remove(rndCard, 1)
    Next
    deck = sb.ToString()
    Clipboard.SetText(deck)
End Sub

我有它所以我的牌组没有20 2s和15 3s等等......因为这是一个有4个牌组的游戏所以每个号码和面牌都应该是16个。

1 个答案:

答案 0 :(得分:0)

1 To prng.Next(208, 208)迭代没有任何意义。后者将始终返回208,因此无需在其中放置Random

至于它为什么不起作用:s.Remove(rndCard, 1)返回一个新的String实例,从中删除了所选的字符。您需要将新字符串重新分配给s

但正如您所猜测的那样,这在性能方面并不是最佳的,因为您在每次迭代期间都在创建新的String对象。更好的方法可能是将s变为StringBuilder,这样您就可以在不创建新实例的情况下删除相关内容。