我正在尝试创建一副扑克牌,它可以自动洗牌,然后按随机顺序输出牌。我遇到了行的错误ArrayIndexOutOfBoundsException
return ranks[rank] + " of " + suits[suit];和
System.out.println( C.toString() );我做错了什么?它输出扑克牌大小,然后偶尔输出一两张卡,然后显示错误代码。提前谢谢。
import java.util.Random;
import java.util.ArrayList;
public class Deck
{
private ArrayList<Card> cards;
Deck()
{
cards = new ArrayList<Card>();
for (int a=0; a<=3; a++)
{
for (int b=0; b<=12; b++)
{
cards.add( new Card(a,b) );
}
}
}
public static void main(String[] args)
{
Deck deck = new Deck();
Card C;
System.out.println( deck.getTotalCards() );
while (deck.getTotalCards() != 0)
{
C = deck.drawFromDeck();
System.out.println( C.toString() );
}
}
public class Card
{
private int rank,
suit;
private String[] suits = {"Hearts", "Spades", "Diamonds", "Clubs"};
private String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
Card(int rank, int suit)
{
this.rank=rank;
this.suit=suit;
}
public @Override String toString()
{
return ranks[rank] + " of " + suits[suit];
}
public int getRank()
{
return rank;
}
public int getSuit()
{
return suit;
}
}
public Card drawFromDeck()
{
Random generator = new Random();
int index = generator.nextInt( cards.size() );
return cards.remove(index);
}
public int getTotalCards()
{
return cards.size();
}
}发布于 2014-02-27 02:12:32
这里的一切都是好的,但是你向后初始化卡。您的Card构造函数是(rank, suit),而您的Deck构造函数正在创建它们的(suit, rank)。
只需在第15行的Deck构造函数中颠倒参数的顺序
cards.add( new Card(a, b) );应该是
cards.add( new Card(b, a) );由于a的范围从0到3,因此a是suit,应该是构造函数中的第二个参数。
https://stackoverflow.com/questions/22049120
复制相似问题