我需要写一个短的随机发生器,它在1到N之间产生一个随机数,其中随机数是M的倍数。
例如:在1和(N=30)之间生成数字,以(M=5)的倍数递增。唯一可能生成的数字是:1、5、10、15、20、25和30。希望你明白我的意思:)
通常,如果使用new Random().nextInt(30)+1,则会得到1(1、2、3、4、5、6、7等)的倍数。这不是我想要的。
任何帮助,链接,或方向是非常感谢?
编辑
生成的随机数序列可以包含1而不是零,这是该方法的要求之一。准确地说,序列总是以下限(min)开始。在这个例子中,下界是1,因此序列中不可能有零。我知道这很奇怪,但这些是我必须遵守的要求;)
发布于 2013-12-04 10:12:48
您可以将随机值乘以5。由于您希望拥有1而不是0,所以只需查找该值并具体修改它:
static final Random random = new Random(System.currentTimeMillis());
public int random(int range, int multiple) {
int value = random.nextInt(range / multiple) * multiple;
return value == 0 ? 1 : value;
}发布于 2013-12-04 10:13:49
我认为你的例子有点错误:序列应该是(0,5,10,15,20,25,30)。
如果我是对的,你可以用:
new Random().nextInt(7) * 5; // will generate a number between 0 and 7 not included then multiply by 5 which should give what you want如果希望从1开始,只需将其添加到前面的语句中即可。
发布于 2013-12-04 10:17:51
试试这个..。
public static void main(String[] args){
int N = 50;
int M = 5;
System.out.println(getRandomNumber(N, M));
}
static int getRandomNumber(int n, int m){
Random r = new Random();
int rnd = r.nextInt(n);
return rnd%m == 0?rnd:getRandomNumber(n, m);
}https://stackoverflow.com/questions/20372416
复制相似问题