2016-11-13 35 views
-1

這是我的構造函數到目前爲止一套45卡與甲板我正在寫一個基本的構造函數,應該做一套45套牌,其中西裝值是像(0-spades,1 -hearts,2-clubs,3-diamonds,4-madeupname)和卡片值是(1-9,其中1是ace)嵌套for循環java撲克遊戲arraylist構造函數

private ArrayList cards;

public Deck() { 
    cards = new ArrayList <Card>(); 

    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,0); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,1); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1 ; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,2); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,3); 
     cards.add(newCard); 
    } 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,4); 
     cards.add(newCard); 
    } 

有什麼問題/缺失?

+4

*什麼錯誤/缺失?*:這就是你**應告訴我們的,而不是讓我們猜測問題是什麼。 –

+1

如果你需要每套西裝的9張卡,它應該是<= 9。 – Eran

+1

首先使用新的for循環。 cards.add(new Card(valueKind,i));對於(int i = 0; i <= 4; i ++){for(int valueKind = 1; valueKind <9; valueKind ++) }}。內循環中的 –

回答

0

如果您想創建值1-9,那麼您的for循環處於錯誤狀態。它應該是<= 9

我做了改進你的代碼,所以它是清潔,修復bug <= 9

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by hendrawd on 11/13/16. 
*/ 
public class Deck { 
    List<Card> cards; 

    public Deck() { 
     cards = new ArrayList<>(); 
     makeCards(Card.SPADE); 
     makeCards(Card.HEART); 
     makeCards(Card.CLUB); 
     makeCards(Card.DIAMOND); 
     makeCards(Card.MADEUPNAME); 
    } 

    private void makeCards(int type) { 
     for (int valueKind = 1; valueKind <= 9; valueKind++) { 
      Card newCard = new Card(valueKind, type); 
      cards.add(newCard); 
     } 
    } 
} 

class Card { 
    static final int SPADE = 0; 
    static final int HEART = 1; 
    static final int CLUB = 2; 
    static final int DIAMOND = 3; 
    static final int MADEUPNAME = 4; 

    private int value, type; 

    Card(int value, int type) { 
     this.value = value; 
     this.type = type; 
    } 
} 
+0

您是否聽說過* int枚舉模式*(我會命名爲* int enum hell *)?避免這種情況。 (項目30,有效Java) – Andrew

+0

@Andrew因爲枚舉在內存中添加更多的數據比使用整數 – HendraWD

0

既然你不啞彈給我一個清晰的問題,我只給你一些一般性建議關於代碼。

首先,您當前的for循環循環從1到8,而不是1到9.您應該將循環條件從valueKind < 9更改爲valueKind <= 9

其次,您可以通過使用一個嵌套循環縮短代碼:

for(int suit = 0 ; suit < 5 ; suit++) { 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,suit); 
     cards.add(newCard); 
    } 
} 

另一件事是,我覺得你的代碼將更具描述性的,如果你使用的常數:

public static final int SPADE = 0; 
public static final int DIAMOND = 1; 
public static final int HEART = 2; 
public static final int CLUB = 3; 
public static final int MADE_UP_NAME = 4; 

//... 

for(int suit = SPADE ; suit <= MADE_UP_NAME ; suit++) { 
    for (int valueKind = 1; valueKind<9; valueKind++){ 
     Card newCard = new Card(valueKind,suit); 
     cards.add(newCard); 
    } 
}