如何在Java中有效地洗牌2D名单?

Shiva_adsule:

我需要创建一个具有从1到16的名单上随机值的二维表。我每次调用函数时就应该给我1到16个值2D名单。

我用这种方式做到了这一点

public List<List<Integer>> shuffle() {
    List<List<Integer>> ls = new ArrayList<>();
    ls.add(Arrays.asList(0, 0, 0, 0));
    ls.add(Arrays.asList(0, 0, 0, 0));
    ls.add(Arrays.asList(0, 0, 0, 0));
    ls.add(Arrays.asList(0, 0, 0, 0));
    Random rand = new Random();
    int x = 1, a, b;
    while (x < 17) {
        a = rand.nextInt(4);
        b = rand.nextInt(4);
        if (ls.get(a).get(b) == 0) {
            ls.get(a).set(b, x);
            x++;
        }
    }
    return ls;
}

此功能平均只需75圈创造16元的2D名单,是任何其他方式有效地做到这一点?

飞行:

您的方法名称已暗示什么必须做。而不是猜测下一个索引集的,只是洗牌的元素。如果你已经洗牌值,您可以简单地切片他们成2维列表。

public List<List<Integer>> create4x4RandomMatrix() {
    List<Integer> ints = IntStream.rangeClosed(1, 16).boxed().collect(Collectors.toList());
    Collections.shuffle(ints);
    List<List<Integer>> matrix = new ArrayList<>();
    for (int i = 0; i < 4; i++) {
        matrix.add(ints.subList(i * 4, (i + 1) * 4));
    }
    return matrix;
}

因为它是一个固定的4×4矩阵@Holger是正确的以静态方式来创建它:

public List<List<Integer>> create4x4RandomMatrix() {
    List<Integer> ints = IntStream.rangeClosed(1, 16).boxed().collect(Collectors.toList());
    Collections.shuffle(ints);
    return Arrays.asList(ints.subList(0, 4), ints.subList(4, 8),
            ints.subList(8, 12), ints.subList(12, 16));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在带有短句的大型数据集中有效地使用spacy?

如何在Java中有效地从另一个函数引用对象/值

如何在Java中有效地合并两个列表?

如何有效地计算2D numpy数组的所有列的总和

如何在Java中有效地使用常量值初始化数组

如何在Go中有效地串联字符串

如何在Java中有效地解析查询参数?

如何在Ruby中有效地连接多个阵列?

Matplotlib:如何在3D中有效地绘制大量线段?

大HDF5数据集,如何在每个时期后有效地洗牌

如何在Java中有效地存储滚动项目属性?

如何在python中有效地搜索列表?

如何在python中有效地将字典中的值分组

如何有效地比较2D矩阵中的每一对行?

如何在JavaScript中有效地组合多个Maybe monad?

如何在python中有效地搜索列表

如何有效地将大型2D数组写入CSV文件

如何在python中有效地对列表进行分类

如何在R中有效地联接具有多个主键的表?

如何在Java中有效地将用户输入的char转换为数值(双精度)?

如何在Rails中有效地对模型进行评分并获取其平均评分

如何有效地将2d数组传递给Netbeans中的JTable?

如何在R中有效地附加列表的所有元素

如何在Unity中有效地对很多RGB颜色进行排序

如何在 Matlab 中有效地计算单个有限差分?

在虚拟 2D 环境中有效地随机放置对象

如何在 JavaScript 中有效地将大块细分为许多大小为 2 的幂的小块

如何在 WSL2 neovim 中有效地拉到系統剪貼板?

如何在 Python 中有效地将 2 元组的所有串联计算成更长的链