试图让一副牌显示西装符号

时间:2014-02-09 02:45:09

标签: java loops for-loop nullpointerexception switch-statement

我正在研究一种试图显示手牌符号的方法,所以不是4C而是4(俱乐部),其中(俱乐部)是俱乐部符号的unicode。

对于switch语句,HEART,CLUB等在我的程序顶部被声明为字符串,用于正确的unicode。

我的问题是,当我运行该方法时,包含“Card card = cards [i];”的行正在产生一个空指针异常,我不明白为什么。请帮助:)

我有“私卡[]卡;”在顶部。当我尝试做= hand.getCards时会产生错误,因为ArrayList无法转换为Card []

现在是我的方法。

private String displaySuits() {
    for (int i = 0; i < hand.getCards().size(); i++) {
        Card card = cards[i];
        suits.append(" ");
        suits.append(card.getRank());

        switch (card.getSuit()) {
            case SPADE:
                suits.append(SPADE);
                break;
            case DIAMOND:
                suits.append(DIAMOND);
                break;
            case CLUB:
                suits.append(CLUB);
                break;
            case HEART:
                suits.append(HEART);
                break;
        }

    }
    return suits.toString();
}

2 个答案:

答案 0 :(得分:4)

您忘记在方法displaySuits中定义Card 的ArrayList。

private String displaySuits() {

    ArrayList<Card> cards = hand.getCards();
    StringBuilder suits = new StringBuilder();

    for (int i = 0; i < cards.size(); i++) {
        Card card = cards[i];
        suits.append(" ");
        suits.append(card.getRank());

        switch (card.getSuit()) {
            case SPADE:
                suits.append((char)'\u2660');
                break;
            case DIAMOND:
                suits.append((char)'\u2666');
                break;
            case CLUB:
                suits.append((char)'\u2663');
                break;
            case HEART:
                suits.append((char)'\u2764');
                break;
        }

    }
    return suits.toString();
}

答案 1 :(得分:1)

当您使用ArrayList时,请勿将cards声明为数组Cards[],而应将其声明为

private List<Card> cards;

在类构造函数中初始化它(良好的编程习惯)

cards = hand.getCards();

您必须访问

等元素
cards.get(i);

注意:

  • 不要忘记ArrayList与数组不同。
  • 不要忘记声明并初始化suits,例如:

    StringBuilder suits = new StringBuilder();