如何生成一个范围内的随机数但排除一些随机数?

2024-02-01

如何生成一个范围内的随机数但排除一些随机数,而不继续生成并检查生成的数字是否是我想要排除的数字之一?


一种无需每次重新生成随机数的可能解决方案是使用以下算法:

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)start and end(两者都包含在内)并且不会为您提供数组中包含的任何数字exclude。所有其他数字以相同的概率出现。请注意,必须满足以下约束:exclude升序排列,所有数字都在给定的范围内,并且所有数字都互不相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成一个范围内的随机数但排除一些随机数? 的相关文章

随机推荐