Java中的Shuffling deck算法

时间:2016-03-23 01:25:01

标签: java

嘿伙计们,我只是在阅读我的笔记,并且很难理解他们用来洗牌的算法。这是它的样子。有人可以尽可能详细地解释每一行吗?非常感谢你。

public void shuffle()
{
    // next call to method dealCard should start at deck[0] again
    currentCard = 0;

    // for each Card, pick another random card (0-51) and swap them
    for (int first = 0; first < deck.length; first++)
    {
        // select a random number between 0 and 51
        int second = randomNumbers.nextInt(NUMBER_OF_CARDS);

        // swap current Card with randomly selected Card
        Card temp = deck[first];
        deck[first] = deck[second];
        deck[second] = temp;
    }
}

3 个答案:

答案 0 :(得分:4)

for循环

for (int first = 0; first < deck.length; first++)

循环通过牌组中的所有牌。它基本上说

  

对于牌组中的每张牌......做一些事情

&#34;一些东西&#34;是for循环中的代码:

    // select a random number between 0 and 51
    int second = randomNumbers.nextInt(NUMBER_OF_CARDS);

    // swap current Card with randomly selected Card
    Card temp = deck[first];
    deck[first] = deck[second];
    deck[second] = temp;

首先选择0到51之间的随机数。

int second = randomNumbers.nextInt(NUMBER_OF_CARDS);

&#34;你为什么要这样做?&#34;您询问。 &#34;混洗&#34;甲板上只是交换卡片中卡片的位置,如

  

5颗钻石登顶,3支球杆进入中间位置,黑桃之王进入第23位......

因此,对于每张卡,该程序&#34;交换&#34;它与卡在甲板上的随机位置。这就是为什么它从0到51选择一个随机数。

让我们说随机数为25.然后将第一张牌与牌组索引25处的牌交换:

Card temp = deck[first];
deck[first] = deck[second];
deck[second] = temp;

如果您不了解交换是如何工作的。我可以解释一下。

在Java中,你不能通过将变量B中的东西放在变量A中的东西和B中的A中的东西来交换东西:

// This code doesn't swap a and b
int a = 10;
int b = 20;
a = b;
b = a;

你需要先把东西放在A的某个地方,

Card temp = deck[first];

然后将B中的东西移动到A,

deck[first] = deck[second];

最后,从那个&#34;某个地方拿起A中的东西&#34;把它放在B:

deck[second] = temp;

唷!那是很多步骤!

答案 1 :(得分:0)

该算法执行以下操作,

@staticmethod
def UnicodeFilter(var):
    temp = var
    temp = temp.encode(errors='ignore').decode('utf-8')
    temp = temp.replace(chr(0x2019), "")
    temp = temp.replace(chr(0x003c), "(lessthan)")
    temp = temp.replace(chr(0x003e), "(greaterthan)")
    temp = temp.replace(chr(0xd83c), "")
    temp = temp.replace(chr(0xddfa), "")
    temp = temp.replace(chr(0xddf8), "")
    temp = temp.replace(chr(0xd83d), "")
    temp = temp.replace(chr(0xdc4d), "")
    temp = temp.replace(chr(0x2026), "")
    temp = temp.replace(u"\U0001F1FA", "")
    temp = temp.replace(u"\U0001F1F8", "")
    temp = temp.replace(u"\U0001F44D", "")
    temp = temp.replace(u"\U00014F18", "")
    temp = temp.replace(u"\U0001F418", "")
    temp = temp.replace(u"\U0001F918", "")
    temp = temp.replace(u"\U0001F3FD", "")
    temp = temp.replace(u"\U0001F195", "")
    temp = Functions.ToSQL(temp)
    return str(temp)

答案 2 :(得分:-1)

Click on this github link for the solution

使用reservSampleShuffle,这里不需要额外的数据结构及其到位shuffle