BlackJack Java String []不起作用

时间:2013-06-27 15:39:39

标签: java compilation blackjack

所以我在BlackJack的java游戏中遇到了一些麻烦。我已经从使用哈希映射转换为卡名称和值,并将其转换为String []只是因为它更容易。但是,我似乎打破了一些代码:

private void createDeck(int numCards, int numSuits) {

    deck = new ArrayList<Card>();
    cardUsed = new ArrayList<Card>();
    if ((numCards % numSuits) > 0) return;

    for (int i=0; i < numSuits; i++) {
        for(int j=1; j <= (numCards / numSuits); j++) {
            deck.add(new Card(new Suit(i), j + "", j));
        }
    }
} 

这不会运行并且给我一个未解决的编译问题:构造函数Card(Suit,String,int)是未定义的。但是我将Card的参数作为Card(Suit,String [],int)。有没有办法通过使用String数组解决这个问题?它强调了程序中的deck.add(new Card(new Suit(i), j + "", j));

以下是Card.java的来源

public class Card  {

private String[] cardRank = new String[] {"Ace", "Two", "Three", "Four", 
        "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"} ;

private Suit suit = null;

private int cardValue = 0;

public Card(Suit suit, String[] cardRank, int cardValue) {
    this.cardRank = cardRank;
    this.suit = suit;
    this.cardValue = cardValue;
}

public String toString() {
    return cardRank + " of " + suit.getSuitName();
}

public String[] getCardRank() {
    return cardRank;
}

public void setCardRank(String[] cardRank) {
    this.cardRank = cardRank;
}

public Suit getSuit() {
    return suit;
}

public void setSuit(Suit suit) {
    this.suit = suit;
}

public int getCardValue() {
    return cardValue;
}

public void setCardValue(int cardValue) {
    this.cardValue = cardValue;
}

}

3 个答案:

答案 0 :(得分:2)

我认为这通常是糟糕的设计。但对于此特定问题,答案可能是将j + ""替换为new String[] {j + ""}

答案 1 :(得分:1)

试试这个:

new Card(new Suit(i), new String[]{j + ""}, j)

您传递的是第二个参数j + "",即String。要传递String[](预期类型),只需将该字符串打包到单个元素数组中:new String[]{j + ""}

在更基础的层面上:为什么卡片等级首先被定义为String[]?它应该是String,一张卡只有一个等级!更好地修复Card类并将其更改为private String cardRank作为属性:

public class Card  {

    private Suit suit = null;
    private String cardRank;
    private int cardValue = 0;

    public Card(Suit suit, String cardRank, int cardValue) {
        this.cardRank = cardRank;
        this.suit = suit;
        this.cardValue = cardValue;
    }

}

现在原始初始化代码将按预期工作:

new Card(new Suit(i), j + "", j)

答案 2 :(得分:0)

您传递的是String,而不是String[]。一个只是一个对象,而另一个是一个对象数组。

j + ""会产生一个String,而不是一组String

您可以将String放入String的数组中,然后再将其传递到构造函数中来解决此问题。