我想创建一个带范围的随机生成器(由var1
定义)和一个异常(由blockvar1
定义)
我写了这个:
Random rand = new Random();
int var1 = rand.nextInt(var1) + 1;
do{
blockvar1 = rand.nextInt(var1) + 1;
}
while (var1 == blockvar1);
答案 0 :(得分:1)
这应该可以解决问题。它创建一个给定最大值和最小值的整数,并且不生成第三个参数中给出的数字。
public static Integer RandomNumberRange(int max, int min, int block)
{
Random rand = new Random();
int randomNum;
do {
randomNum = rand.nextInt((max - min) + 1) + min;
} while (randomNum == block && (max != block && block != min));
return randomNum;
}
示例调用范围为5-1和2作为阻塞的函数的输出
public static void main(String[] args) {
for(int i = 0; i < 20; i++)
System.out.print(RandomNumberRange(5, 1, 2) + " ");
}//main method
输出
1 5 5 1 5 4 3 3 4 1 5 5 5 1 5 4 3 5 1 5
答案 1 :(得分:0)
我的代码存在两个(次要)问题:
var1
用于两个目的,它既是随机数的上限,也是随机数本身;这会引起混淆,结果可能不如预期(即使在随机数字方面期望很明显)。这是我的建议:
private static Random rand = new Random();
/**
* Generates a pseudo-random number in the range 0..var1, but not blockvar1
* @param var1 upper bound (inclusive) of random number
* @param blockvar1 forbidden number
* @return the generated random number
*/
public static int randomNumberRange(int var1, int blockvar1) {
if (blockvar1 < 0 || blockvar1 > var1) {
throw new IllegalArgumentException("blockvar1 must be between 0 and var1 inclusive");
}
int result = rand.nextInt(var1);
if (result >= blockvar1) {
result++;
}
return result;
}
重复调用randomNumberRange(4, 2)
的示例输出:
1 1 3 3 1 0 0 0 4 4 1 0 3 3 4 3 3 0 1 3
您会注意到它会为您提供0到4之间的数字,但不包括2。