2017-02-06 51 views
1
import java.util.ArrayList; 

public class Deck{ 

    final private int CARD_SET = 52; 
    final private int NUM_FACE = 13; 
    final private int NUM_SUITE = 4; 

    private ArrayList<Card> cardSet = new ArrayList<>(52); 
    private Card card = new Card(); 

    public Deck(){ 

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

      if(i >= 0 && i < NUM_FACE) { 
       card.setSuite("club"); 
       card.setFace(i + 1); 
      }else if(i >= NUM_FACE && i < NUM_FACE*2){ 
       card.setSuite("diamond"); 
       card.setFace(i + 1 - NUM_FACE); 
      }else if(i >= NUM_FACE*2 && i < NUM_FACE*3){ 
       card.setSuite("heart"); 
       card.setFace(i + 1 -(NUM_FACE*2)); 
      }else if(i >= NUM_FACE*3 && i < NUM_FACE*4){ 
       card.setSuite("spade"); 
       card.setFace(i + 1 - (NUM_FACE*3)); 
      } 

      cardSet.add(card); 

     } 

    } 

    public void printDeck(){ 

     for(Card card : cardSet){ 

      System.out.println(card.getFace()); 
      System.out.println(card.getSuite()); 
     } 
    } 

} 

當我調用「printDeck()」時,它顯示ArrayList中的所有13個黑桃。 我不明白爲什麼這些代碼無法成爲一個套牌。 您的幫助將延長我的壽命。在java中製作卡片組類

+3

因爲您沒有創建新的'Card'實例,所以您在每次迭代時修改相同的一個。在'for'循環中移動'Card card = new Card()' – BackSlash

+0

您應該爲每次迭代創建一個新的'Card'實例,而不是整個班級的一個實例。 – Henrik

+0

在for循環中重新定位卡片實例是解決這個問題的唯一方法嗎? –

回答

0

每次迭代循環時,都應該創建Card的新實例。

... 
public Deck(){ 

    for(int i = 0; i < CARD_SET; i++){ 
     Card card = new Card(); 
     if(i >= 0 && i < NUM_FACE) { 
      card.setSuite("club"); 
      card.setFace(i + 1); 
...