首页 > 解决方案 > 类卡不会转换为字符串

问题描述

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

卡.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;
        }
    }
}

DeckOfCardsTest.java:


public class DeckOfCardsTest {
    public static void main(String[] args) {
        DeckOfCards myDeckOfCards = new DeckOfCards();
        myDeckOfCards.shuffle();

        Scanner input = new Scanner(System.in);

        System.out.printf("Enter number of players(max 10): ");
        int numPlayers = input.nextInt();

        if(numPlayers > 10)
            numPlayers = 10;

        String[] playerHand = new String[10];
        String[] boardCards = new String[5];

        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();
                        //^This is the line that throws the error

        }

        System.out.printf("Flop: %s %s %s%n", boardCards[0], boardCards[1], boardCards[2]);
        System.out.printf("Turn: %s%n", boardCards[3]);
        System.out.printf("River: %s%n", boardCards[4]);



    }
}

编译器错误是:

DeckOfCardsTest.java:25: error: incompatible types: Card cannot be converted to String
boardCards[i] = myDeckOfCards.dealCard();
                                      ^

标签: java

解决方案


在您正在执行的第一个 for 循环中myDeckOfCards.dealCard() + " " + myDeckOfCards.dealCard(),使用+ " "Card返回的类转换dealCard为 String。

因此,要解决您的问题,您可以执行dealCard().toString()dealCard() + ""


推荐阅读