在Java中生成随N的倍数增加的随机数

时间:2013-12-04 10:10:31

标签: java random

我需要编写一个短随机数,它产生一个介于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而不是0是该方法的要求之一。确切地说,序列始终以下限(min)开始。在该示例中,下限是1,因此序列中不能为零。我知道这很奇怪,但这些是我必须遵循的要求;)

4 个答案:

答案 0 :(得分:8)

您可以将随机值乘以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;
}

答案 1 :(得分:2)

我认为你的例子有点缺陷:序列应该是(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开始,那么只需将它添加到上一个语句

答案 2 :(得分:0)

试试这个..

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);
}

答案 3 :(得分:0)

int n=Random.range(1,10);
n=n*100;