Java 班级卡赢得';t转换为字符串
我正在开发一个基本的扑克应用程序。Card和DeckOfCards类在大多数情况下似乎工作正常,但当我尝试处理社区卡(board cards)时,我会遇到一个编译器错误。我有点困惑,因为我在前面的for循环中处理玩家的手时,似乎在做同样的事情 card.java:Java 班级卡赢得';t转换为字符串,java,Java,我正在开发一个基本的扑克应用程序。Card和DeckOfCards类在大多数情况下似乎工作正常,但当我尝试处理社区卡(board cards)时,我会遇到一个编译器错误。我有点困惑,因为我在前面的for循环中处理玩家的手时,似乎在做同样的事情 card.java: public class Card { private final String face; private final String suit; public Card(String cardFace, S
public class Card {
private final String face;
private final String suit;
public Card(String cardFace, String cardSuit) {
this.face = cardFace;
this.suit = cardSuit;
}
public String toString() {
return face + suit;
}
}
DeckOfCards.java:
public class DeckOfCards {
private static final SecureRandom randomNumbers = new SecureRandom();
private static final int NUMBER_OF_CARDS = 52;
private Card[] deck = new Card[NUMBER_OF_CARDS];
private int currentCard = 0;
public DeckOfCards() {
String[] faces = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K"};
String[] suits = {"h", "c", "d", "s"};
for(int count = 0; count < deck.length; count++) {
deck[count] = new Card(faces[count % 13], suits[count/13]);
}
}
public void shuffle() {
currentCard = 0;
for (int first = 0; first < deck.length; first++) {
int second = randomNumbers.nextInt(NUMBER_OF_CARDS);
Card temp = deck[first];
deck[first] = deck[second];
deck[second] = temp;
}
}
public Card dealCard() {
if (currentCard < deck.length) {
return deck[currentCard++];
}
else {
return null;
}
}
}
在执行的第一个for循环中,
myDeckOfCards.dealCard()+“”+myDeckOfCards.dealCard()
,使用+“”
将dealCard
返回的Card
类转换为字符串
因此,要解决您的问题,您可以执行
dealCard().toString()
或dealCard()+“”
作为异常状态,在DeckOfCardsTest代码的第25行,您将类型为Card的dealCard()方法的结果分配给类型为String的boardCards数组元素。Java不会隐式地将自定义类转换为字符串。
您可以将板卡的类型从字符串[]更改为卡片[]。
或者你可以:
boardCards[i] = myDeckOfCards.dealCard().toSring();
myDeckOfCards.dealCard()
返回一个Card
对象,而不是String
,并且不能直接将Card
对象转换为String
。看起来您想将数组声明为卡
数组,而不是字符串
数组
Card[] playerHand = new Card[10];
Card[] boardCards = new Card[5];
如果确实需要字符串
,请在卡
对象上调用toString()
。将对象连接到字符串时,会有一个隐式的toString()
调用,但在直接赋值时不会
for(int i = 0; i < numPlayers; i++) {
playerHand[i] = myDeckOfCards.dealCard() + " " + myDeckOfCards.dealCard();
System.out.printf("Player %d Hand: %s%n", (i + 1), playerHand[i]);
}
for(int i = 0; i < 5; i++) {
boardCards[i] = myDeckOfCards.dealCard().toString(); //need to explicitly call toString() here.
//^This is the line that throws the error
}
使用.toString()方法可以将其转换为字符串类型,一切都会正常。
在错误行使用此选项
boardCards[i] = myDeckOfCards.dealCard().toSring();
非常感谢。现在这很有道理;我在理论上知道隐式和显式转换,但现在我在实践中理解了。如果我将数组中的每个成员声明为类型卡,而不是整个两张牌,那么我是否只能在数组中存储一张卡(即2h或6d)。我没有注意到,当我发表评论时,您在一个元素中存储了两张卡。在这种情况下,您必须制作二维数组或使用某种元组来包装一对卡片。
for(int i = 0; i < numPlayers; i++) {
playerHand[i] = myDeckOfCards.dealCard() + " " + myDeckOfCards.dealCard();
System.out.printf("Player %d Hand: %s%n", (i + 1), playerHand[i]);
}
for(int i = 0; i < 5; i++) {
boardCards[i] = myDeckOfCards.dealCard().toString(); //need to explicitly call toString() here.
//^This is the line that throws the error
}
public class Test {
public static void main(String[] args) throws Exception {
String test="blah" + new Integer(7); //this is OK. Implicit toString() call
String test2=new Integer(7); //compile error here.
}
}
boardCards[i] = myDeckOfCards.dealCard().toSring();