没有再生每次随机的一种可能的解决方案是使用以下算法:

public int getRandomWithExclusion(Random rnd, int start, int end, int... exclude) {

int random = start + rnd.nextInt(end - start + 1 - exclude.length);

for (int ex : exclude) {

if (random < ex) {

break;

}

random++;

}

return random;

}

这个方法可以用数组引用来调用,例如。

int[] ex = { 2, 5, 6 };

val = getRandomWithExclusion(rnd, 1, 10, ex)

或直接将号码插入呼叫:

val = getRandomWithExclusion(rnd, 1, 10, 2, 5, 6)

它在开始和结束(包括两端)之间生成一个随机数(int),不会给出数组中包含的任何数字。所有其他数字以相等的概率发生。注意,以下约束必须保持:exclude按升序排序,并且所有数字都在提供的范围内,并且所有数字都相互不同。

更多推荐

java怎么在范围内生成一个数_java – 如何在一个范围内生成一个随机数,但排除一些?...