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