Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中生成以N的倍数递增的随机数_Java_Random - Fatal编程技术网

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

在Java中生成以N的倍数递增的随机数,java,random,Java,Random,我需要写一个简短的随机数发生器,它生成一个介于1到N之间的随机数,其中随机数是M的倍数 例如:生成1到N=30之间的数字,以M=5的倍数递增。然后,唯一可能生成的数字是:1、5、10、15、20、25和30。希望你明白我的意思: 通常,如果使用新的Random.nextInt30+1,则数字将以1、2、3、4、5、6、7的倍数递增,以此类推。。那不是我想要的 非常感谢任何帮助、链接或指导 编辑: 生成的随机数序列可以包含1而不是零是该方法的要求之一。精确地说,序列总是以下限min开始。在本例中,

我需要写一个简短的随机数发生器,它生成一个介于1到N之间的随机数,其中随机数是M的倍数

例如:生成1到N=30之间的数字,以M=5的倍数递增。然后,唯一可能生成的数字是:1、5、10、15、20、25和30。希望你明白我的意思:

通常,如果使用新的Random.nextInt30+1,则数字将以1、2、3、4、5、6、7的倍数递增,以此类推。。那不是我想要的

非常感谢任何帮助、链接或指导

编辑:


生成的随机数序列可以包含1而不是零是该方法的要求之一。精确地说,序列总是以下限min开始。在本例中,下限为1,因此序列中不可能有零。我知道这很奇怪,但这些是我必须遵守的要求

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

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

我认为你的例子有点缺陷:顺序应该是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开始,那么只需将它添加到前面的语句中,我认为你的示例有点缺陷:序列应该是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开始,那么只需将其添加到上一条语句中即可

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);
}
试试这个

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


这不是随机数。这是序列号,是5的倍数。1怎么可能是一个生成的数字,因为要生成的数字需要是5的倍数?@R.J我知道你的意思,但这个简短方法的要求是从下限开始,所以1不是零:是的,它有点奇怪@christian.vogel-是的,这看起来确实有点奇怪,但我想你已经得到了下面的答案!:是的,谢谢你的评论;这不是随机数。这是序列号,是5的倍数。1怎么可能是一个生成的数字,因为要生成的数字需要是5的倍数?@R.J我知道你的意思,但这个简短方法的要求是从下限开始,所以1不是零:是的,它有点奇怪@christian.vogel-是的,这看起来确实有点奇怪,但我想你已经得到了下面的答案!:是的,谢谢你的评论+1我认为第一个值为1是OPNo的错误,实际上不是;正如我在前面的评论中所说,该方法的要求表明它应该从下限开始。在这个例子中,它不是零。@Matthew Franglen只是为了学习一些新的东西。为什么给随机构造函数当前系统时间作为参数?@christian.vogel传递给随机构造函数的种子用于初始化伪随机生成器。如果不使用不同的值进行种子设定,可能最终会得到相同的“随机”数。以毫秒为单位的当前时间是一个足够的启动种子,因为每次运行程序时它都会改变。如果使用相同的种子创建两个随机实例,并且对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。+1我认为第一个值为1是OPNo的错误,实际上不是;正如我在前面的评论中所说,该方法的要求表明它应该从下限开始。在这个例子中,它不是零。@Matthew Franglen只是为了学习一些新的东西。为什么给随机构造函数当前系统时间作为参数?@christian.vogel传递给随机构造函数的种子用于初始化伪随机生成器。如果不使用不同的值进行种子设定,可能最终会得到相同的“随机”数。以毫秒为单位的当前时间是一个足够的启动种子,因为每次运行程序时它都会改变。如果使用相同的种子创建两个随机实例,并且对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。谢谢,伙计。完全同意应该从0开始的事实,但是这个方法的要求是它应该从下限开始,并且对于这个例子来说不是0。@christian.vogel好的,有道理:-我想可能是打字错误,因此我的问题谢谢,伙计。完全同意应该从0开始的事实,但该方法的要求是它应该从下限开始,并且对于示例来说,该下限不是0。@christian.vogel好的,有道理:-我认为可能是一些打字错误,因此我的问题请编辑更多信息。不鼓励只编码并尝试此答案,因为它们不包含可搜索的内容,并且
我无法解释为什么有人应该试试这个。我们在这里努力成为一个知识资源。请编辑更多信息。不鼓励只编码并尝试此答案,因为它们不包含可搜索的内容,并且不解释为什么有人应该尝试此答案。我们努力成为知识的源泉。