java - 使用数组列表洗牌的输出不显示

标签 java arraylist shuffle

这里一切正常,除了在我洗牌后试图显示牌组之外。我不知道为什么,但数组列表在洗牌后似乎是空的。如果我注释掉洗牌代码,则套牌会显示,但显然是未洗牌的。由于这是一项作业,我需要我的程序保持相同的通用格式,并且洗牌算法需要尽可能保持相同。

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/

相关文章:

java - 从列表到整数。无法转换查询结果

java - 根据相同的Id对arraylist中的数据进行分组

java - 哪个使用数组列表更有效?

algorithm - 快速排序中的随机改组如何帮助提高代码效率?

java - 为什么注释 Digit 2 之后的语句被标记为 "unreachable"?

java - Oracle SYS_CONNECT_BY_PATH 达到 4000 个字符限制

java - 检查输入的数字是否为奇数

java - 尝试访问 docx 文件中的子节点

PHP不重复随机值

c++ - 带有 std::queue 的 std::random_shuffle