这里一切正常,除了在我洗牌后试图显示牌组之外。我不知道为什么,但数组列表在洗牌后似乎是空的。如果我注释掉洗牌代码,则套牌会显示,但显然是未洗牌的。由于这是一项作业,我需要我的程序保持相同的通用格式,并且洗牌算法需要尽可能保持相同。
public class Shuffler
{
public static void selectionShuffle(ArrayList<Card> values) {
ArrayList<Card> shuffled = new ArrayList<Card>();
ArrayList<Card> copy = new ArrayList<Card>();
for (int k = 51; k >= 0;) {
int r = (int)(Math.random() * (double)52);
if (r < values.size()) {
shuffled.add(values.get(r));
values.remove(r);
k--;
}
}
for (int i = 0; i < values.size(); i++) {
values.set(i, shuffled.get(i));
}
}
这是牌组构造函数,它用三个数组创建一副牌以形成三个卡对象。
public class Deck
{
public static ArrayList<Card> cards = new ArrayList<Card>();
private int size;
public Deck(String[] ranks, String[] suits, int[] values)
{
for (int i = 0; i < values.length; i++) {
cards.add(new Card(ranks[i], suits[i], values[i]));
}
size = values.length;
shuffle();
}
public void shuffle() {
Shuffler.selectionShuffle(cards);
size = size();
}
}
最佳答案
这应该是:
for (int i = 0; i < shuffled.size(); i++) {
values.add(shuffled.get(i));
}
问题是你有:
for (int i = 0; i < values.size(); i++) {
values.set(i, shuffled.get(i));
}
此时值的大小为 0,因此它不会执行任何操作...您从值中删除了所有元素,因此它的大小为 0。
关于java - 使用数组列表洗牌的输出不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252159/