所以我在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;
}
}
答案 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
的数组中,然后再将其传递到构造函数中来解决此问题。