返回一个随机的偶数

我有以下方法。 方法rnd,返回两个边界之间的单个随机整数:

/* Create next batch of 55 random numbers */ void advance_random (){ int j1; double new_random; for(j1=0; j1<24; j1++){ new_random = oldrand[j1]-oldrand[j1+31]; if(new_random<0.0){ new_random = new_random+1.0; } oldrand[j1] = new_random; } for(j1=24; j1<55; j1++){ new_random = oldrand[j1]-oldrand[j1-24]; if(new_random=55){ jrand = 1; advance_random(); } return((double)oldrand[jrand]); } //randomPerc /* Fetch a single random integer between low and high including the bounds */ synchronized int rnd (int low, int high){ int res; if (low >= high){ res = low; } else { res = low + (int)(randomperc()*(high-low+1)); if (res > high){ res = high; } } return (res); } // rnd 

如何修改它以使返回的数字mod2 = 0?

谢谢

如果你能得到范围[a, b]的随机数,那么你所要做的就是得到一个[(a+1)/2, b/2]范围内的随机数,然后乘以2得到一个随机数范围内的偶数[a, b]

使用位掩码强制最低有效位为零:

 x = x & ~1; 

将您从代码中得到的结果乘以最后两个 – 仍然是随机的,然后除以2!

如何使用:

return res & ~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的原因。 另请注意,我们对ThreadLocalRandom.nextInt()的输入+1的原因是为了确保max包含在范围内。