【发布时间】:2015-03-03 16:36:52
【问题描述】:
我目前正在通过 AP CS 十一人实验室工作,该实验室让您开发自己的纸牌和套牌类来模拟纸牌游戏。我目前正在编写一个 shuffle 方法,该方法接受一个 Deck 对象并随机打乱其中的 Card 对象。到目前为止,这是我的方法:
public void shuffle() {
ArrayList<Card>copy = new ArrayList <Card> ();
for (int i = cards.size(); i >= 0; i--) {
int d = (int)(Math.random()*i);
copy.add(cards.get(d));
cards.remove(d);
}
size = cards.size();
cards = copy;
}
cards 是一个用多个Card 对象初始化的ArrayList。此代码工作正常,但前提是 cards.remove(d); 行不存在。为什么是这样?我该如何解决?
如果这有帮助,这里是为您提供的 Deck 的构造函数类:
public Deck(String[] ranks, String[] suits, int[] values) {
cards = new ArrayList<Card>();
for (int j = 0; j < ranks.length; j++) {
for (String suitString : suits) {
cards.add(new Card(ranks[j], suitString, values[j]));
}
}
size = cards.size();
shuffle();
}
【问题讨论】:
-
当有问题的行出现时会出现什么问题?
-
程序可以编译,但一旦运行,我就会收到
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0错误。 -
如果那一行不存在,它运行良好