(编辑,希望更清楚) 我正在学习为Android编码,并希望制作一个程序,从一个范围中随机选择一个数字,然后对指定的迭代运行随机选择的剩余数字。
此示例中的4次迭代:
输出为2,6,7,9。
我是否会使用洗牌数组中的字符赋值,a = 1,b = 2等?我希望第一个随机选择的数字不存在于随机化的连续集中。最后,在这个例子中,7,2和9不在最后一组中。重点不在于避免重复,而是生成一个新的特定非顺序集,以随机选择另一个唯一的数字。
答案 0 :(得分:0)
看看下面的例子:
public static void main(String args[]) {
// Create our test case
List<Integer> integerList = new ArrayList<Integer>();
for(int i=0; i<10; i++) {
integerList.add(i+1);
}
// Print out 4 randomly chosen elements from list
Random rand = new Random();
for(int i=0; i<4; i++) {
System.out.println(selectOne(rand, integerList));
}
}
private static Integer selectOne(Random rand, List<Integer> integerList) {
int randomIndex = rand.nextInt(integerList.size());
return integerList.remove(randomIndex);
}
对每个连续调用selectOne,删除并返回一个随机元素。由于您无法删除相同的项目两次,因此对于列表中的每个元素,它将只选择一次。这适用于一系列数字以及一副牌。
事实上,如果您使用以下内容,那么您可以像使用List<Integer>
一样轻松使用List<Card>
:
private static <T> T selectOne(Random rand, List<T> integerList) {
int randomIndex = rand.nextInt(integerList.size());
return integerList.remove(randomIndex);
}