2016-10-06 36 views
0

我在我的Java程序Black Jack中遇到問題。我似乎無法解決我的「this.cards [o ++]」,因爲它總是進入ArrayIndexOutOfBoundException。但是,如果我將其改爲「this.cards [j]或this.cards [i]」,它不會收到錯誤,但我知道它錯了。混洗和陣列問題Java

下面是錯誤的:

**this.cards[o++]** 
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13 
     at CardDeck.<init>(CardDeck.java:18) 
     at BlackJoker.main(BlackJoker.java:17) 

**this.cards[j]** 
null 
Kc 
Qc 
8c 
null 
null 

**this.cards[i]** 
null 
Ac 
Ah 
null 
null 
Ad 

這裏是我的代碼:

import java.util.*; 
public class CardDeck 
{ 
    private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", 
        "J", "Q", "K", "A" }; 
    private char[] suits = {'s','h','d','c'}; 
    private Card[] cards = new Card[13]; 
    private int currentCard; 

    CardDeck() 
    { 
     Card newCard; 
     int o = 0; 
     for(int i=0; i<this.suits.length; i++) 
     { 
      for(int j=0; j<this.ranks.length; j++) 
      { 
       this.cards[o++] = new Card(this.ranks[j], this.suits[i]); 
      } 
     } 
     this.shuffle(); 
    } 

    public void testing() //just for testing 
    { 
     System.out.println(this.suits[0]); 
    } 

    public Card drawNextCard() 
    { 

     return cards[currentCard++]; 
    } 

    private void shuffle() 
    { 
     Card[] tmp = new Card[13]; 
     for (int i = 0; i < cards.length; i++) 
     { 
      int index = (int)(Math.random() * (cards.length)); 

      tmp[index] = cards[i]; 
      cards[i] = cards[index]; 
      cards[index] = tmp[i]; 
     } 
    } 
} 

public class BlackJoker 
{ 
    public static void main(String[] args) 
    { 
     CardDeck cardDeck = new CardDeck(); 

     //cardDeck.testing(); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     System.out.println(cardDeck.drawNextCard()); 
     //System.out.println(cardDeck.drawNextCard()); 
    } 
} 

+0

請注意,「this.cards [j]」給了我一個不變的'c'套裝,然後「this.cards [i]」給了我一個恆定的'A'(ace)。有人可以向我解釋我做錯了什麼嗎?非常感謝你的任何幫助和建議 – Mia

+1

最好有抽象卡和甲板,甲板有一個卡集合。您可以使用內置的Collections.shuffle()方法。https://www.tutorialspoint.com/java/util/collections_shuffle.htm – duffymo

回答

1

您分配一個數組,將只持有13張牌:

private Card[] cards = new Card[13]; 

嘗試使其成爲52:

private Card[] cards = new Card[52]; 
0

除了增加卡片數組長度,在隨機播放功能,你正在計算使用的Math.random索引,導致ArrayIndexOutbound異常,如果該指數超出卡陣列長度。你需要處理這個。

+1

不是問題。由於'Math.random()'總是返回小於1,'(int)(Math.random()*(cards.length))'將小於'cards.length'。 –