首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在指定范围内生成一个可被5整除的随机整数?

如何在指定范围内生成一个可被5整除的随机整数?
EN

Stack Overflow用户
提问于 2013-10-13 10:00:51
回答 5查看 1.9K关注 0票数 3

给定一个整数范围,如何在该范围内生成一个可被5整除的随机整数?

我正在使用Java

EN

回答 5

Stack Overflow用户

发布于 2013-10-13 10:30:02

只需生成一个规则的随机整数,并将其乘以5!

详细信息:[0, n)中生成一个随机整数,其中n是您的范围内5的倍数,然后将其乘以5并将最小的倍数相加。

一行: System.out.println(rnd.nextInt(max / 5 - (min + 4) / 5 + 1) * 5 + (min + 4) / 5 * 5); (假设参数为非负且有效)

credits:最低的多重表达式(min + 4) / 5 * 5来自here,表达式根据@Thomas的答案简化了一点(国际海事组织目前不正确)

票数 6
EN

Stack Overflow用户

发布于 2013-10-13 10:44:44

这个问题要求在一个范围内是5的倍数,而不是在范围内的5的周期内的数字。

这个解决方案处理负片和范围有效性。

代码语言:javascript
复制
    // because Java's % operator doesn't do what one might expect with negatives

    int lbound = (min+4) - (((min+4) % 5) + 5) % 5;
    int ubound = max - (((max % 5) + 5) % 5);

    if (lbound > ubound) {
        // do something about the range error
    }

    if (lbound == ubound) {

        return lbound;
    }

    int range = ((ubound - lbound)/5) + 1;

    return ((int)(Math.random() * range) * 5) + lbound;
票数 1
EN

Stack Overflow用户

发布于 2013-10-13 17:19:19

首先创建一个Random,将lowhigh分别舍入到最接近的5的上下倍数:

代码语言:javascript
复制
Random r = new Random();
low = ((low+4)/5)*5;    // next multiple of 5
high = (high/5)*5;  // previous multiple of 5

这可能会使low > high变得不可行,因此不再继续;或者它可能会使low == high变得毫无意义,所以您可能想要测试一下。下面的代码在任何一种情况下都能正常工作,因为+1和-1:在{low..high}中生成随机数

代码语言:javascript
复制
int randomPart = r.nextInt(high-low+1)+low-1;

然后向上舍入到5的倍数。前面与lowhigh的恶作剧确保了它在范围内:

代码语言:javascript
复制
int nextInt = ((randomPart+4)/5)*5;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19341074

复制
相关文章

相似问题

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