它不断抛出这个异常,但是它出现在程序的输出之间,到目前为止,它完全按照我的需要运行。问题是什么?
好吧所以这就是抛出异常的地方: 公共类RunGame {
public static void main(String[] args) {
//Create players
Hand Player1 = new Hand(5);
Hand Player2 = new Hand(5);
Hand Player3 = new Hand(5);
Hand Player4 = new Hand(5);
Deck deck = new Deck();
Card print = new Card(1,'c');
deck.Shuffle();
for (int i = 0; i <= 52; i++){
print = deck.getCard(i); //**THROWS HERE**
System.out.println(print.toString());
}
然后在我的甲板课上有:
public class Deck {
private char suit;
private int value;
private Card [] deck = new Card[52];
public Deck(){
int count = 0;
for(int i = 1; i <= 4; i++) {
if (i == 1)
{
suit = 'C';
}
else if (i == 2) {
suit = 'D';
}
else if (i == 3) {
suit = 'H';
}
else {
suit = 'S';
}
for (int x = 1; x <= 13; x++){
deck[count] = new Card(x, suit);
count++;
}
}
}
和
public Card getCard(int i){
int v = deck[i].getValue(); //**AND HERE**
char s = deck[i].getSuit();
Card temp = new Card(v,s);
return temp;
}
我只想打印卡座以确保它正确地进行了洗牌。一切都打印出来,但仍然显示出来。 (我的deck对象是52个卡的数组,getValue和getCard方法都在Card类中。)
答案 0 :(得分:1)
我猜你的循环中的deck.getCard(i)在某个时刻返回null,然后当你尝试从该空引用调用toString()时,程序崩溃了。
也许你的循环应该说我&lt; 52而不是&lt; =?但这应该会导致ArrayIndexOutOfBoundsException。没有看到整个Deck课程,真的很难说。
答案 1 :(得分:1)
你有52张卡 如果从0(正确)开始计数,则在计数51处到达卡#52 你数到52,包括52;这是不正确的,因为元素0需要包含在计数中 一个简单的一个错误。
将代码更改为:
for (int i = 0; i < 52; i++){
print = deck.getCard(i); //No more exception