由于某些原因,在此代码中,我的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个。
答案 0 :(得分:0)
从1 To prng.Next(208, 208)
迭代没有任何意义。后者将始终返回208,因此无需在其中放置Random
。
至于它为什么不起作用:s.Remove(rndCard, 1)
返回一个新的String实例,从中删除了所选的字符。您需要将新字符串重新分配给s
。
但正如您所猜测的那样,这在性能方面并不是最佳的,因为您在每次迭代期间都在创建新的String对象。更好的方法可能是将s
变为StringBuilder
,这样您就可以在不创建新实例的情况下删除相关内容。