我有一个数字池(例如 {3,6,7,11,20}),我需要每个数字在我的集合中出现 x 次。
我的解决方案是创建一个包含两个整数(num,numOfAppearnces)的类,我们称之为“元素”。
我在 arrayList 中创建了一个“元素”池,然后生成了 0 到 list.size 之间的随机数,并将该数字存储在随机索引中。
当 numOfAppearances 减少到 0 时,我从列表中删除了这个元素。
我的问题是,是否有其他优雅的解决方案来生成随机数,而不是从范围生成随机数?
是的,有更短的方法可以实现您所描述的目标。
例如 :
Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (Integer i : arr)
shuffled.addAll (Collections.nCopies(x,i)); // add i to your List x times
Collections.shuffle(shuffled); // shuffle the List to get random order
或者(如果你不想使用Collections.nCopies(x,i)
) :
Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (int j = 0; j < x; j++)
for (Integer i : arr)
shuffled.add (i);
Collections.shuffle(shuffled); // shuffle the List to get random order
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)