Vb.net 防止重复卡

Vb.net 防止重复卡,vb.net,Vb.net,我正在尝试这样做,如果我随机生成的卡与当前存储的任何卡相同,它将返回并生成一张新的随机卡并存储它。我有问题,试图找到一种方法,使它重新检查每一次新卡已生成 我现在有这个,但我需要其他人看看它,告诉我如何更改代码,使其正常工作 For x As Integer = 0 To 21 drawCard(x) While (redraw > 1) For y As Integer = 0 To 21 If

我正在尝试这样做,如果我随机生成的卡与当前存储的任何卡相同,它将返回并生成一张新的随机卡并存储它。我有问题,试图找到一种方法,使它重新检查每一次新卡已生成

我现在有这个,但我需要其他人看看它,告诉我如何更改代码,使其正常工作

  For x As Integer = 0 To 21
        drawCard(x)
        While (redraw > 1)
            For y As Integer = 0 To 21
                If randomCards(x) = randomCards(y) Then
                    drawCard(x)
                    redraw += 1
                End If
            Next
        End While
    Next

假设你真正想要做的是从52张牌中随机抽取22张牌,最简单的方法是取数字1-52,将它们混合,然后取前22个值

一旦你做到了这一点,你所需要做的就是从你的牌组中取出这22个索引处的牌,你就有了一手洗牌牌

为了让您开始假设您对此感到满意,而不是以前的方法,此代码将为您提供22个索引,以从您的组中获取:

Dim rnd As New Random
Dim ShuffledCards As List(Of Integer) = Enumerable.Range(1, 52).OrderBy(Function(i) rnd.Next).Take(22).ToList
实际上,第二行代码所做的是:

创建从1到52的数字列表Enumerable.Range1,52 使用新的随机数rnd。下一步选择如何对每个随机数进行排序,以便将数字1-52置乱 采取这些措施中的前22项 将其保存为整数列表 您可能希望了解类似或阅读Linq的内容,以了解更多关于Linq的整体信息

再说一次,我不确定你是否同意这种方式,但希望它能有所帮助


PS-使用相同的过程,您也可以使用.orderbyfunction i rnd.Next直接随机分配您的卡片组,然后跳过获取索引。。。有些人更喜欢中间步骤,不过…

您是特别希望这样做,还是只是希望从一副牌中随机获得22张牌?实际上,您的抽卡程序是做什么的??另外,如果您特别想这样做,那么什么数据类型是randomCardsi,它如何检查相等性?听起来您想要的是以随机顺序启动数据组,而不是生成重复数据。如果是这样,你需要改变它:如果你不懂CI,谷歌会给你一些VB解决方案。我对VB很陌生。你能看一下第二行代码并向我解释发生了什么吗?谢谢你,这让我更好地理解你,因为你是新来的,记住,如果这解决了你的问题,然后将其标记为解决方案,以显示问题的答案