2016-11-13 68 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); 
    } 
}