0

所以我在 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)。有没有办法通过仍然使用字符串数组来解决这个问题?它强调了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;
}

}

4

3 回答 3

2

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

于 2013-06-27T15:42:57.487 回答
1

试试这个:

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

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

在更基本的层面上:为什么首先将卡等级定义为a String[]?应该是a String,单卡只有一个等级!更好地修复Card类并将其更改为具有private String cardRankas 属性:

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)
于 2013-06-27T15:42:30.327 回答
0

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

j + ""结果是一个String,而不是一组Strings。

您可以通过在将s 传递给构造函数之前将其放入 sString数组中来解决此问题。String

于 2013-06-27T15:41:09.213 回答