如何在java中混洗链表

时间:2015-02-23 21:35:05

标签: java linked-list

我不能为我的生活弄清楚为什么这个shuffle方法不起作用:

public void deckShuffle(int shuffle) {
    Random rand = new Random();
    int targetCard, cardValue, cardSuit;
    Card temp, card;

    for (int x = 0; x < shuffle; x++) {
    for(int y = 1; y < 52; y++) {
            targetCard = 51 - rand.nextInt(51);
            temp = getCard(targetCard);
            cardValue = temp.getCardValue();
            cardSuit = temp.getCardSuit();
            removeCard(targetCard);
            addLast(cardValue, cardSuit);
    }
}

以下是我的删除卡代码并添加最后一行:

public void removeCard(int index) {

    if (head.next == null || index < 1) {return;}

    if (count > 0 && index <= count) {
        Card current = head;

        for (int x = 0; x < index; x++) {
            current = current.next;
        }

        current.next = current.next.next;
        count--;
    }
}




public void addLast(int cardValue, int cardSuit) {
    Card temp = new Card(cardValue, cardSuit, null);        
    Card current = head; // POINTER

    while (current.next != null) {
        current = current.next;
    }

    current.next = temp;
    count++;
}

我试图弄清楚为什么代码不起作用。当我运行一种方法来打印一副52张牌并将其洗牌时,这些牌都显示为2张牌。我知道这不是我的构建套牌方法,因为我在编写shuffle方法之前测试了它。

我发现了伙计们。我的删除卡方法不能正常工作,但现在它是如此甲板适当地洗牌。谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

为什么不使用Collections.shuffle方法?

有关更多信息,您可以发布您的卡类吗?然后,至少有人可以尝试运行代码,如果他们愿意的话。

答案 1 :(得分:0)

if (head.next == null || index < 1) {return;}

我认为这不是你想要的。你应该想要:

if (head == null) return;

原始版本使得删除不起作用,因为当套牌中只有一张卡片时。

如果head是固定的链接列表标题实例,则

甚至删除此行。

答案 2 :(得分:0)

不应该&#39;吨

        targetCard = 51 - rand.nextInt(51);

        targetCard = rand.nextInt(52-y);

虽然这不会导致您描述的问题,但我相信您可能会遇到系统其他部分的问题