我做了一个测验应用,它使用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次运行才能填充数组。有更简单/更快的方法吗?
答案 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;
}