Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 班级卡赢得';t转换为字符串_Java - Fatal编程技术网

Java 班级卡赢得';t转换为字符串

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

我正在开发一个基本的扑克应用程序。Card和DeckOfCards类在大多数情况下似乎工作正常,但当我尝试处理社区卡(board cards)时,我会遇到一个编译器错误。我有点困惑,因为我在前面的for循环中处理玩家的手时,似乎在做同样的事情

card.java:

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();