用随机数填充int []

时间:2016-04-02 10:06:46

标签: java android arrays random

我做了一个测验应用,它使用int []数组来设置答案的位置。数组必须用数字0,1,2和3填充,但它们必须随机放置(并且只发生一次)。我设法做到的唯一方法是:

public int[] castRanInt(){
    int ran_int[] = new int[4];
    Random random = new Random();
    boolean state = true;
    ran_int[0] = random.nextInt(4);
    while (state) {
        for (int r = 1; r < 4; r++) {
            ran_int[r] = random.nextInt(4);
        }
        state = false;
        for (int a = 0; a < 4; a++) {
            for (int b = 0; b < 4; b++) {
                if (a == b) {
                    continue;
                }
                if (ran_int[a] == ran_int[b]) {
                    state = true;
                }

            }
        }
    }
    return ran_int;
}

唯一的问题是,在while循环中这通常需要多达100次运行才能填充数组。有更简单/更快的方法吗?

2 个答案:

答案 0 :(得分:0)

到目前为止我发现了:

public int[] castRanInt(){
    List<Integer> intList = Arrays.asList(new Integer[]{ 0, 1, 2, 3 });
    Collections.shuffle(intList);

    // Convert List<Integer> to int[]
    int[] ret = new int[intList.size()];
    for(int i = 0; i < ret.length; i++) {
        ret[i] = intList.get(i);        
    }

    return ret;
}

这使用Collections.shuffle但遗憾的是,从Integer[]转换为int[]

并不容易

答案 1 :(得分:0)

就像Arnaud Denoyelle所说的那样,你需要一个用索引启动的列表,这样你就可以随机播放

public List shuffleArray(int size) {
    List<Integer> list = new ArrayList<>();
    for(int i = 0; i < size; i++) {
        list.add(i);
    }
    Collections.shuffle(list);
    return list;
}