来自洗牌数组

时间:2016-02-08 14:57:17

标签: android arraylist random

(编辑,希望更清楚) 我正在学习为Android编码,并希望制作一个程序,从一个范围中随机选择一个数字,然后对指定的迭代运行随机选择的剩余数字。

  

此示例中的4次迭代:

  • 1 2 3 4 5 6 7 8 9 10,从集合中随机选择一个整数,说" 7",然后另一个新集,
  • 1 2 3 4 5 6 8 9 10,随机化,然后从新组中选择一个整数,说" 2",然后是新组,
  • 1 3 4 5 6 8 9 10,从新集中随机选择一个整数,说" 9",然后是新集,
  • 1 3 4 5 6 8 10,随机选择一个整数,说" 6"。
  

输出为2,6,7,9。

我是否会使用洗牌数组中的字符赋值,a = 1,b = 2等?我希望第一个随机选择的数字不存在于随机化的连续集中。最后,在这个例子中,7,2和9不在最后一组中。重点不在于避免重复,而是生成一个新的特定非顺序集,以随机选择另一个唯一的数字。

1 个答案:

答案 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);
}