首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中生成N的倍数增加的随机数

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

Stack Overflow用户
提问于 2013-12-04 10:10:31
回答 4查看 6K关注 0票数 1

我需要写一个短的随机发生器,它在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,因此序列中不可能有零。我知道这很奇怪,但这些是我必须遵守的要求;)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-04 10:12:48

您可以将随机值乘以5。由于您希望拥有1而不是0,所以只需查找该值并具体修改它:

代码语言:javascript
运行
复制
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;
}
票数 9
EN

Stack Overflow用户

发布于 2013-12-04 10:13:49

我认为你的例子有点错误:序列应该是(0,5,10,15,20,25,30)。

如果我是对的,你可以用:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-12-04 10:17:51

试试这个..。

代码语言:javascript
运行
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20372416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档