这是以下格式:
int randomNum = rand.nextInt((max - min) + 1) + min;
所以这是我的代码。我试图获得1到100之间的随机偶数:
Random rand = new Random();
int randomNum = rand.nextInt((100 - 2) + 1) + 2;
我看到一个解决方案是将数字乘以2,但这会超出预期的范围。
我想过做一堆if语句来解决这个问题,但它看起来过于复杂。有一个相对简单的解决方案吗?
答案 0 :(得分:9)
只需生成0到49之间的数字,然后将其乘以2.
Random rand = new Random();
int randomNum = rand.nextInt(100/2) *2;
要在范围内执行此操作,只需添加范围:
int randomNum = startOfRange+rand.nextInt((endOfRange-startOfRange)/2) *2;
请注意,startOfRange应为偶数或转换为偶数。
答案 1 :(得分:1)
另一种方法(可能不是最佳方法):
- 创建一个数组(或列表),其中包含1到1之间的所有偶数 100.(循环很容易)
- 当你需要一个随机的偶数时,只需从该数组或列表中取一个随机数(使用随机的长度或大小)。
醇>
答案 2 :(得分:1)
生成2到1000之间的随机数的最佳方法
Random random = new Random();
int Low = 2;
int High = 1000;
int randomNumber = random.nextInt(High-Low) + Low;
if(randomNumber % 2 != 0){
randomNumber = randomNumber + 1;
}
答案 3 :(得分:1)
在Java 1.7或更高版本中,我会使用ThreadLocalRandom:
import java.util.concurrent.ThreadLocalRandom;
// Get even random number within range [min, max]
// Start with an even minimum and add random even number from the remaining range
public static int randEvenInt(int min, int max) {
if (min % 2 != 0) ++min;
return min + 2*ThreadLocalRandom.current().nextInt((max-min)/2+1);
}
// Get odd random number within range [min, max]
// Start with an odd minimum and add random even number from the remaining range
public static int randOddInt(int min, int max) {
if (min % 2 == 0) ++min;
return min + 2*ThreadLocalRandom.current().nextInt((max-min)/2+1);
}
使用ThreadLocalRandom的原因解释为here。另请注意,我们对ThreadLocalRandom.nextInt()的输入+1的原因是为了确保max包含在范围内。
答案 4 :(得分:1)
private int getRandomNoOdd(int maxValue) {//min value is 0, including zero, max value can potentially be reached by randomness
int random = 0;
while (true) {
random = (int) (Math.random() * (maxValue + 1));
if (random % 2 != 0)
continue;
break;
}
return random;
}
答案 5 :(得分:1)
您还可以从某个范围中获取随机数,然后,如果%2!= 0,则加1。