Java 如何生成指定范围内可被5整除的随机整数?

Java 如何生成指定范围内可被5整除的随机整数?,java,random,integer,Java,Random,Integer,给定一个整数范围,如何生成该范围内可被5整除的随机整数 我正在使用Java在您的值之间选择一个随机数,然后测试它是否可以被div整除。如果是,它将返回该值,否则它将不得不在max div-1迭代中获得一个可以被div整除的数 在您的情况下,调用rBetweenGenerator(最小值、最大值、5) public int-rbetween生成器(int-min、int-max、int-div) { int res=min+((new Random()).nextInt(max-min+1)) f

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


我正在使用Java

在您的值之间选择一个随机数,然后测试它是否可以被div整除。如果是,它将返回该值,否则它将不得不在max div-1迭代中获得一个可以被div整除的数

在您的情况下,调用rBetweenGenerator(最小值、最大值、5)

public int-rbetween生成器(int-min、int-max、int-div)
{
int res=min+((new Random()).nextInt(max-min+1))
for(inti=res;i
只需生成一个规则的随机整数并将其乘以5

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

一行:
系统输出打印LN(rnd.nextInt(max/5-(min+4)/5+1)*5+(min+4)/5*5);
(假设参数为非负且有效)


学分:最低倍数表达式
(min+4)/5*5
根据@Thomas(我目前不正确)的答案,表达式简化了一点

这个问题要求在一个范围内使用五的倍数,而不是在该范围内五个周期内的数字

此解决方案处理负片和范围有效性

    // 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;

首先创建一个
Random
,并将
low
high
分别四舍五入到最接近的高/低倍数:

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}
中生成一个随机数

int randomPart = r.nextInt(high-low+1)+low-1;
然后将其向上舍入到5的倍数。之前使用
的诡计确保其在范围内:

int nextInt = ((randomPart+4)/5)*5;

此方法首先计算给定范围内可被5整除的数字的数量。它随机选取一个介于0和该计数之间的数字,然后将该随机数乘以5并将其添加到下限,将其转换回给定范围

请注意,
lowerBound
upperBound
都包含在内

public static int getRandomDivisibleByFive(int下限,int上限){
如果(lowerBound>0)lowerBound+=4;
如果(上限<0)上限-=4;
lowerBound/=5;
上限/=5;
int n=上限-下限+1;
if(n<1){
抛出新的IllegalArgumentException(“范围太小”);
}
返回5*(lowerBound+new Random().nextInt(n));
}

您尝试过什么吗?我可以使用以下命令生成一个随机数:random.nextInt(max-min)+min;但是,我不知道如何使随机生成的整数可以被5整除。您考虑过除法和乘法吗?或者您选择在这里询问吗?如果范围是[3,7]那么你能生成的唯一数字是5?如果范围是[1,4],你的程序应该怎么做?我很确定如果范围边界不能被5整除,就不应该返回它们。哎哟,我刚才看到一个关于[3,7]的问题得到了回答返回3 5或7固定值。嗯……为什么返回错误的
-1
?如果发生错误,则应引发异常。如果初始
res
高于最高有效倍数5,则返回的数字将大于
max
。为什么不直接执行
if(lbound>ubound)
进行错误检测?“找到最低倍数和计数是一件棘手的事情……留给读者作为练习。”“--很有趣,但是-不,我不认为这样做会起作用。我不认为,也不知道为什么。但是一行代码很难阅读。介意一些格式吗?@JanDvorak简化+操作与口头描述一致。这实际上不起作用。你试过吗?如果低=14和高=16怎么办?完全修改;-)
int nextInt = ((randomPart+4)/5)*5;