2

我正在尝试使用数组来处理桥牌,然后按花色对其进行排序。该程序处理所有 13 张卡,但随后出现错误,

"Exception in thread "main" 
java.lang.ArrayIndexOutOfBoundsException: 13 
at DeckStuff.main(DeckStuff.java:29)"

任何帮助,将不胜感激。

public static void main(String[] args) {

    Card.shuffleDeck();

    Card.dumpCards();

    Card[] bridgeHand = new Card[13];

    for (int i = 0; i < bridgeHand.length; i++) {
        bridgeHand[i] = Card.dealCard();
    }

    for (int i = 0; i < bridgeHand.length; i++) {
        System.out.print(bridgeHand[i]);
    }
    System.out.println();

    Card.sortHand(bridgeHand);

    String[] suit = {"Spades", "Hearts", "Diamonds", "Clubs"};

    int j = 0;
    for(int i = 0; i < 4; i++) {
        String s = suit[i].substring(0,1);
        System.out.print("\n" + s + ": ");

        while (bridgeHand[j].getCardSuitName().equals(suit[i])) {
            System.out.print(bridgeHand[j]);
            j++;
        }
    }   
}
}
4

2 回答 2

3

j没有被重置,while一旦遇到错误的同花牌,循环就会停止,这是不正确的,因为你想检查所有的牌,但只打印正确的同花牌。

尝试:

for(int i = 0; i < 4; i++) {
    String s = suit[i].substring(0,1);
    System.out.print("\n" + s + ": ");

    for(int j = 0; j < bridgeHand.length; j++) {
        if (bridgeHand[j].getCardSuitName().equals(suit[i])) {
            System.out.print(bridgeHand[j]);
        }
    }
}  
于 2013-04-24T23:06:16.797 回答
3

java.lang.ArrayIndexOutOfBoundsException:13

这意味着您正在越界访问数组。您给它的索引值为 13。我什至还没有阅读您的代码,但我猜这是一个错误的错误。

...阅读...

是的。你不断地增加 j。错误消息也会给你一个行号。

在 DeckStuff.main(DeckStuff.java:29)"

这意味着错误位于文件 DeckStuff.java 的第 29 行

于 2013-04-24T23:08:10.050 回答