我需要编写一个短随机数,它产生一个介于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,因此序列中不能为零。我知道这很奇怪,但这些是我必须遵循的要求;)
答案 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;