处理一手牌 - 不兼容的类型错误

时间:2016-07-30 20:49:58

标签: java playing-cards incompatibletypeerror

我的问题是我的教授给了我们关于如何编写这种方法的非常详细的说明:

“dealAHand方法有一个循环,一次处理一张Card(使用前面的方法 - dealACard),直到它处理了handSize Cards。返回的String是手中的Card对象列表 - 类似于结果ofString除了这里返回的String只包含handSize Card对象。“

我正在尝试按照他所说的做,但我一直遇到不兼容的类型错误:在这个版本中,它说crd无法转换为Card []。此外,这是唯一提到变量handSize的时间。

如果需要,我也可以发布我的驱动程序。有任何想法吗?请保持介绍级别。

public class Card {
    private Face face;
    private Suit suit;

    public Card() {//default
        face = Face.ACE;
        suit = Suit.HEARTS;
    }

    public Card(Card existingCard) {//copy
        //Card card = new Card(existingCard);
        face = existingCard.face;
        suit = existingCard.suit;
    }

    public Card(int n) {//professor written paramaterized
        face = Face.values()[n % 13];
        suit = Suit.values()[n % 4];
    }

    public String toString() {
        String str = "";
        str = "the " + face + " of " + suit;

        return str;
    }
}

import java.util.Random;

public class Deck {
    Card[] deck;
    int nextCard;

    public Deck() {//default, filling the deck
        nextCard = 0;
        deck = new Card[52];

        for (int i = 0; i < 52; i++) {
            deck[i] = new Card(i);
        }
    }

    public Deck(Card[] existingCard) {//copy
        for (int i = 0; i < 52; i++) {
            deck[i] = existingCard[i];
        }
    }

    public void shuffle() {
        Random rn = new Random();
        Card temp;
        int num;

        for (int i = 0; i < 52; i++) {
            num = rn.nextInt(52);
            temp = deck[i];
            deck[i] = deck[num];
            deck[num] = temp;
        }
        nextCard = 0;
    }

    public Card dealACard() {
        nextCard++;
        return deck[nextCard - 1];
    }

    public String dealAHand() {//CHANGED
        int handSize = 5;
        Card[] crd = new Card[handSize];
        String hand = "";
        for (int i = 0; i < handSize; i++) {
            hand += crd[i].dealACard() + "\n";

        }
        return hand;
    }

    public String toString() {
        String str = " ";

        for (int i = 0; i < 52; i++) {
            str += deck[i].toString() + "\n";
        }
        return str;
    }
}

3 个答案:

答案 0 :(得分:0)

您应该使用大小初始化crd数组。 Java数组是固定大小的。 首先尝试声明handSize然后构造数组以具有该大小,如下所示 - Card[] crd = new Card[handSize];

同时更改dealAHand的返回类型以返回卡片数组。

答案 1 :(得分:0)

我终于明白了!谢谢所有回复的人。 : - )

public String dealAHand() {
    int handSize = 5;

    String hand = "";
    for (int i = 0; i < handSize; i++) {
        hand += dealACard() + "\n";
    }
    return hand;
}

答案 2 :(得分:0)

问题是你的教授写的参数化,&#34;或者你的特点。值%4和值%13不能完全正确。考虑我订购东西的情况:

AS 2S 3S 4S 5S。 。 。 JS QS KS AH 2H 3H。 。 。 JH QH KH AD 2D 3D。 。 。等

在这种情况下,13分的分数告诉我们我们在(S,H,D或C)中的哪个套装,而MODULO 13告诉我们等级。或者,如果我们组织如下:

AS AH AD AC 2S 2H 2D 2C。 。 。 QS QH QD QC KS KH KD KC

然后DIVIDE BY FOUR给出等级,MODULO四给出了套装。

值%4和值%13简单不正确。这本身就是一个基本的基本错误。这绝不可行。