2016-07-30 11 views
0

我的问题是我的教授给我们如何写这个方法非常详细的说明:交易一手牌 - 不兼容的类型错误

“的dealAHand方法有一个循环,涉及一个卡(使用以前的方法 - dealACard),直到它已经处理了handSize Cards。返回的String是手中的Card对象列表 - 类似于toString的结果,除了此处返回的String仅包含handSize Card对象。“

I试图做他所说的话,但我不断遇到不兼容的类型错误:在这个化身中,它说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; 
    } 
} 
+0

你究竟在哪里得到这个错误? – Mureinik

+0

crd在dealAHand中为null。 –

+0

错误返回crd; – Tonantzin

回答

0

您应该初始化crd阵列的大小。 Java数组的大小是固定的。 尝试宣告handSize第一,然后构建数组有大小,这样的 - Card[] crd = new Card[handSize];

而且改变dealAHand返回类型返回卡的阵列。

+0

这几乎奏效。但现在我还有2个问题。它打印的是内存位置而不是卡片,我误读了说明:它必须返回一个字符串。我将改变上面的内容来反映它,但是我在将一个String和crd结合起来时遇到了问题。 – Tonantzin

0

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

public String dealAHand() { 
    int handSize = 5; 

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

您的“教授书面参数化”存在一个问题,或者您对其进行了描述。值%4和值%13不能都是正确的。考虑一下我订购东西的情况:

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

在这种情况下,通过十三分割告诉我们我们在(S,H,D或C)中有哪些适合,而MODULO十三则告诉我们等级。或者,如果我们组织如下:

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

然后DIVIDE BY FOUR给出排名和MODULO四给出的诉讼。

值%4和值%13是简单的不正确。这本身就是一个非常基本的错误。这永远不会工作。