-1

我正在尝试学习如何制作扑克游戏,所以我在网站上搜索扑克项目。

这是我找到的甲板类。

这是对我没有意义的代码部分。

   int index_1, index_2;


    for (int i = 0; i < 100; i++) {

        index_1 = generator.nextInt(cards.size() - 1);

        index_2 = generator.nextInt(cards.size() - 1);



        temp = cards.get(index_2);

        cards.set(index_2, cards.get(index_1));

        cards.set(index_1, temp);

    }

}
4

2 回答 2

1

看起来像是随机洗牌,随机选择两个牌位。将nextInt(cards.size() - 1)在范围内生成一个随机索引[0,cards.size() - 1)

index_1 = generator.nextInt(cards.size() - 1);
index_2 = generator.nextInt(cards.size() - 1);

交换两张卡,因为您必须先替换其中一张卡并且您不想丢失该对象,所以用于temp保存要替换的第一张卡的代码cards.get(index_2)将获得第一个卡对象。

temp = cards.get(index_2);

第一个set将替换其中的对象,index_2第二index_1set将替换为index_1我们之前存储的临时对象:

cards.set(index_2, cards.get(index_1));
cards.set(index_1, temp);

它执行此过程的100时间:

for (int i = 0; i < 100; i++)

如果我们假设cards.size() - 1是牌组中最后一张牌的索引,那么nextInt调用将跳过最后一张牌,如果没有更多上下文,很难知道这是否是故意的。

于 2013-07-19T18:26:15.403 回答
0

这段代码正在做的是交换牌组中的两张牌。它任意执行 100 次。一个更好的方法是随机分配一张牌到牌组中的一个位置。现在的方式可能永远不会触及某些牌组,您最终可能会以与以前相同的顺序在相同位置获得一堆牌。另外,它只涉及 52 步而不是 300 步(card2 -> temp, card1 -> card2, temp -> card1)。

于 2013-07-19T18:28:08.553 回答