将前几个元素组合在一起

时间:2015-03-08 03:22:12

标签: java arraylist

我的下面的代码执行数组的随机化,但是,我想知道我是否要将前两个或三个元素组合在一起,我该怎么办?

ArrayList<Integer> numbers = new ArrayList<Integer>();

for(int i=1;i<=11;i++)
{
    numbers.add(i);
}
Collections.shuffle(numbers);


for (Integer nums : numbers)
    System.out.println(nums);

示例输出:5,7,4,11,2,3,1,9,6,8,10 (注意,序列&#39; 1,2,3&#39;在主阵列中随机化。)

2 个答案:

答案 0 :(得分:1)

public static void shuffleKeepingFirstRTogether(List<Integer> list, int r) {
    int size = list.size();
    Collections.shuffle(list.subList(0, r));
    Collections.shuffle(list.subList(r, size));
    Collections.rotate(list, new Random().nextInt(size - r));
}

答案 1 :(得分:1)

这样的事情可能是:

final int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
final int iterations = 10;
final int groupOf = 3;

for (int i = 0; i < array.length; i += groupOf) {
    int groupOfRemainder = array.length - i < groupOf ? array.length - i : groupOf;
    for (int j = 0; j < iterations; j++) {
        int rnd1 = Math.random() * groupOfRemainder;
        int rnd2 = Math.random() * groupOfRemainder;

        Object temp = array[i + rnd1];
        array[i + rnd1] = array[i + rnd2];
        array[i + rnd2] = temp;
    }
}