如何生成每个随机数之间具有特定间隔的随机数

时间:2016-01-28 17:34:58

标签: java sorting random

我试图在范围之间生成8个随机数,例如1到100.我生成正常但我需要生成随机数,所有生成的随机数和最小最大范围值之间的特定差异被排除。比如1到100我必须生成数字为2,12,22,32,42,52,62,72。无论如何,我可以生成这样的随机数。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试生成随机数,然后将初始值添加到输出中。我改编了一个http://www.javapractices.com/topic/TopicAction.do?Id=62的例子来解决你的问题。

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int ini = 1;
        int end = 100;
        Random random = new Random();
        for (int i = 0; i < 8; i++){
            // for this particular example we must add one to ini
            // so that ini is excluded from the output
            generateRandomInt(ini + 1, end, random);
        }
    }

    private static void generateRandomInt(int ini, int end, Random random){
        int range,randomInt,randomNumber;
        range = end - ini;
    randomInt = random.nextInt(range);
        randomNumber =  randomInt + ini;    
        System.out.println("Generated : " + randomNumber);      
    }
}

答案 1 :(得分:0)

在所提供的示例中,N = 100,随机数R = 8,并且间隔V = 10。序列以F开头(第一个数字,即随机数)。

序列为F,F + V,F + 2 * V,...... F +(R-1)* V

该序列占据空间S =(R-1)* V + 1空间。在此示例中,范围是2到72,或S = 71。

您还要求排除mix和max(1和100)。

所以允许的随机空间离开L = N - S - 2 = 27。

因此F变为1到27之间的随机数,然后加1以避免最小值。

一旦你有了F,就会出现这个序列。

编辑:如果没有提供V,您也可以随机计算V(参见S的公式; V来自知道N和R)