簡體   English   中英

我如何在Java中建立卡片改組方法以使卡片按特定順序排列?

[英]how can i build a card shuffling method in java for cards to go in a specific order?

卡片必須像上半部和下半部一樣依次排列,直到通過52張卡片組為止。 每個副牌都有26張牌,它們按以下順序排列:

top1, bottom1, top2, bottom2, top3, bottom3, top4, bottom 4, ..., top n, bottom n

我正在考慮這樣做: Card[] topHalf= new Card[cards.length/2];

public void shuffle() {
    int index = 0;

    for (int suit = 0; suit <= 1; suit++) {
        for (int value = 1; value <= 13; value++) {
            cards[index] = new Card(value, suit);
            index++;
        }
    }
    Card[] botHalf= new Card[(cards.length+26)/2];

    int index2 = 0;

    for (int suit = 2; suit <= 3; suit++) {
        for (int value = 1; value <= 13; value++) {
            cards[index] = new Card(value, suit);
            index2++;

        }
        for (int row = 0; row < cards.length; row++){

            row++;

            Card [] temp = new Card[( topHalf.length)+botHalf.length];
        //cards[row]= cards[index];
    }

按照卡片顯示順序將其存儲在已排序的地圖中。 Sorted Map將為您進行排序。 然后,您可以依次遍歷它們:

SortedMap map = new SortedMap();

map.put(1, "top1");
map.put(2, "bottom1");
map.put(3, "top2");
...
...
...
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
   Object key = iterator.next();
   System.out.println(" card :" + map.get(key));
}

只是為了澄清,聽起來像是您想要的隨機排列數字

1 2 3 4 5 6 7 8

1 8 2 7 3 6 4 5

最有效的方法是創建一個新數組,因為就地交換元素並不容易,而且不會很快。 此模式中的主要觀察結果是,每個偶數元素(從索引0開始,因此第一個元素為偶數)都從牌組的開始向上計數,奇數元素從牌組的末尾開始向后計數。

使用此信息,我們可以遍歷新數組,根據當前索引是奇數還是偶數,從特定索引中復制原始數組的值。 如果我們新數組中的當前索引稱為i ,則

  • 如果i是偶數,那么我們想要的元素位於索引i/2
  • 如果i為奇數,則元素位於索引array.length - (i+1)/2+1將舍入為最接近的偶數)

這是代碼:

public static Card[] rifleShuffle(Card[] deck) {
    Card[] newDeck = new Card[deck.length];

    for (int i = 0; i < newDeck.length; i++) {
        // Check whether current index is odd or even by using mod 2
        if (i % 2 == 0) {
            newDeck[i] = deck[i / 2];
        } else {
            newDeck[i] = deck[deck.length - ((i + 1) / 2)];
        }
    }

    return newDeck;
}

public static void main(String[] args) {
    Card[] deck1 = new Card[52];

    int i = 0;
    for (int suite = 0; suite < 4; suite++) {
        for (int value = 1; value <= 13; value++) {
            deck1[i++] = new Card(value, suite);
        }
    }

    System.out.println("Before shuffling: " + Arrays.toString(deck1));

    Card[] deck2 = rifleShuffle(deck1);

    System.out.println("After shuffling:  " + Arrays.toString(deck2));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM