Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用c#随机洗牌一个包含10张牌的列表(稍后将增加到52张)。但是我有问题,只有一半的问题被洗牌了 静态列表卡片分发(列表卡片组、列表玩家卡片、列表对手卡片) { int TotsalCards=甲板。计数; int-Cardstake; int indexofcardstake; int值; Random CardTaker=新的Random(); 用于(int PlC=0;PlC1) { 如果(PlC%2==0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(播放卡包含(卡片记录)) { 后藤重做; } 其他的 { PlayerCard.Add(cardstake); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } 否则如果(PlC%2!=0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(对方卡片包含(卡片记录)) { 后藤重做; } 其他的 { 反对者卡片添加(卡片记录); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } } 否则如果(总卡==1) { OpponentCard.Add(组[0]); } } List ReturnDecks=新列表(); 返回甲板。添加(玩家卡); ReturnDecks.Add(OpponentCard); 返回甲板; }_C#_List_Random - Fatal编程技术网

我想用c#随机洗牌一个包含10张牌的列表(稍后将增加到52张)。但是我有问题,只有一半的问题被洗牌了 静态列表卡片分发(列表卡片组、列表玩家卡片、列表对手卡片) { int TotsalCards=甲板。计数; int-Cardstake; int indexofcardstake; int值; Random CardTaker=新的Random(); 用于(int PlC=0;PlC1) { 如果(PlC%2==0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(播放卡包含(卡片记录)) { 后藤重做; } 其他的 { PlayerCard.Add(cardstake); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } 否则如果(PlC%2!=0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(对方卡片包含(卡片记录)) { 后藤重做; } 其他的 { 反对者卡片添加(卡片记录); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } } 否则如果(总卡==1) { OpponentCard.Add(组[0]); } } List ReturnDecks=新列表(); 返回甲板。添加(玩家卡); ReturnDecks.Add(OpponentCard); 返回甲板; }

我想用c#随机洗牌一个包含10张牌的列表(稍后将增加到52张)。但是我有问题,只有一半的问题被洗牌了 静态列表卡片分发(列表卡片组、列表玩家卡片、列表对手卡片) { int TotsalCards=甲板。计数; int-Cardstake; int indexofcardstake; int值; Random CardTaker=新的Random(); 用于(int PlC=0;PlC1) { 如果(PlC%2==0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(播放卡包含(卡片记录)) { 后藤重做; } 其他的 { PlayerCard.Add(cardstake); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } 否则如果(PlC%2!=0) { 重做: IndexofCardTaken=cardstaker.Next(0,总卡数+1); CardTake=甲板[IndexOfcardtake]; if(对方卡片包含(卡片记录)) { 后藤重做; } 其他的 { 反对者卡片添加(卡片记录); 值=甲板[IndexOfcardtake]; 卡片组[索引卡片]=卡片组[总卡片]; 甲板[总卡]=价值; } } } 否则如果(总卡==1) { OpponentCard.Add(组[0]); } } List ReturnDecks=新列表(); 返回甲板。添加(玩家卡); ReturnDecks.Add(OpponentCard); 返回甲板; },c#,list,random,C#,List,Random,我正在使用另外两个函数来填充原始的卡片组列表,并检查所有列表都收到了哪些卡片 我看到只有一半的值被洗牌。 请提供帮助,因为我在这里看到了所有其他类似的问题,但它们在这种情况下没有帮助。洗牌的一般方法称为a,并且很容易在列表上实现 static Random rnd=new Random(); 公共静态无效洗牌(列表) { 对于(var i=0;i而言,洗牌的一般方法称为a,并且很容易在列表上实现 static Random rnd=new Random(); 公共静态无效洗牌(列表) { 对于(

我正在使用另外两个函数来填充原始的
卡片组
列表,并检查所有列表都收到了哪些卡片

我看到只有一半的值被洗牌。

请提供帮助,因为我在这里看到了所有其他类似的问题,但它们在这种情况下没有帮助。

洗牌的一般方法称为a,并且很容易在
列表上实现

static Random rnd=new Random();
公共静态无效洗牌(列表)
{

对于(var i=0;i而言,洗牌的一般方法称为a,并且很容易在
列表上实现

static Random rnd=new Random();
公共静态无效洗牌(列表)
{

对于(var i=0;i哪个部分?前半部分?后半部分?每隔一个?对列表进行洗牌是一个已解决的问题。您是否考虑过使用,或者您是否希望出于教育目的自行滚动列表?其中一个问题可能是,您在循环开始时有
TotsalCards--
,这也是用于确定loop结束。因此,如果TotsalCards在10开始,那么在5次迭代之后,它将是5和PlC(每个循环递增)将是5,您的循环将完成。几乎肯定不是您希望发生的事情。正如Heinzi所说,虽然您可能想使用现有的良好的洗牌实现,或者至少看看它们,如果您想编写自己的代码,您可以找到如何实现它的想法。我还感到,如果您调试了代码,您很容易就会看到这一点e loop的运行次数没有您预期的那么多,您可以了解确切的原因。学会调试。从长远来看,它将为您节省大量时间。在随机选择的数字中,只有5个被选择。是的,我想编写代码用于我自己的教育目的,这就是为什么我避免看到已经存在的错误给出了解决方案,但我没有更多的想法。哪一半?上半部分?下半部分?每隔一个?对列表进行洗牌是一个已解决的问题。您是否考虑过使用,或者您是否希望出于教育目的使用自己的列表?其中一个问题可能是,您在循环开始时有
TotsalCards--
,这是also用于确定循环何时结束的值。因此,如果TotsalCards在10开始,则在5次迭代后,它将是5和PlC(每个循环递增)将是5,您的循环将完成。几乎肯定不是您希望发生的事情。正如Heinzi所说,虽然您可能想使用现有的良好的洗牌实现,或者至少看看它们,如果您想编写自己的代码,您可以找到如何实现它的想法。我还感到,如果您调试了代码,您很容易就会看到这一点e loop的运行次数没有您预期的那么多,您可以了解确切的原因。学会调试。从长远来看,它将为您节省大量时间。在随机选择的数字中,只有5个被选择。是的,我想编写代码用于我自己的教育目的,这就是为什么我避免看到已经存在的错误给出了解决方案,但我没有更多的想法。旁白:交换元素现在可以写成
(list[I],list[j])=(list[j],list[I]);
@LasseV.Karlsen Nice.我没有想到这一点是的,你正确地理解了逻辑。我对Fisher-Yates Shuffle部分有问题。我非常感谢你的帮助。旁白:交换元素现在可以写成
(list[I],list[j])=(list[j],list[I]);
@LasseV.Karlsen不错。我没有想到这一点。是的,你正确理解了逻辑。我对Fisher-Yates Shuffle部分一直有问题。我非常感谢你的帮助。
static List<List<int>> CardDistribution(List<int> Deck,List<int> PlayerCard, List<int> OpponentCard)
{
    int TotsalCards = Deck.Count;
    int CardTaken;
    int IndexofCardTaken;
    int value;

    Random CardTaker = new Random();

    for (int PlC = 0; PlC < TotsalCards; PlC++)
    {
        TotsalCards--;
        if (TotsalCards > 1)
        {
            if (PlC % 2 == 0)
            {
            Redo:
                IndexofCardTaken = CardTaker.Next(0, TotsalCards + 1);
                CardTaken = Deck[IndexofCardTaken];
                if (PlayerCard.Contains(CardTaken))
                {
                    goto Redo;
                }
                else
                {
                    PlayerCard.Add(CardTaken);
                    value = Deck[IndexofCardTaken];
                    Deck[IndexofCardTaken] = Deck[TotsalCards];
                    Deck[TotsalCards] = value;
                }
            }
            else if (PlC % 2 != 0)
            {
            Redo:
                IndexofCardTaken = CardTaker.Next(0, TotsalCards + 1);
                CardTaken = Deck[IndexofCardTaken];
                if (OpponentCard.Contains(CardTaken))
                {
                    goto Redo;
                }
                else
                {
                    OpponentCard.Add(CardTaken);
                    value = Deck[IndexofCardTaken];
                    Deck[IndexofCardTaken] = Deck[TotsalCards];
                    Deck[TotsalCards] = value;
                }
            }
        }
        else if(TotsalCards == 1)
        {
            OpponentCard.Add(Deck[0]);
        }
    }
    List<List<int>> ReturnDecks = new List<List<int>>();
    ReturnDecks.Add(PlayerCard);
    ReturnDecks.Add(OpponentCard);
    return ReturnDecks;
}
static Random rnd = new Random();

public static void Shuffle<T>(List<T> list)
{
    for(var i=0;i<list.Count-2;i++) 
    {
        var j = rnd.Next(i, list.Count);
        var temp = list[i];
        list[i] = list[j];
        list[j] = temp;
    }
}
static List<List<int>> CardDistribution(List<int> Deck,List<int> PlayerCard, List<int> OpponentCard)
{
    Shuffle(Deck);
    for(var i=0;i<Deck.Count;i++)
    { 
        if((i % 2) == 0) PlayerCard.Add(Deck[i])
        else OpponentCard.Add(Deck[i])
    }
    return new List<List<int>>
    {
         PlayerCard,
         OpponentCard
    }
}
static void CardDistribution(List<int> Deck,List<int> PlayerCard, List<int> OpponentCard)
{
    Shuffle(Deck);
    for(var i=0;i<Deck.Count;i++)
    { 
        if((i % 2) == 0) PlayerCard.Add(Deck[i])
        else OpponentCard.Add(Deck[i])
    }
}