我试图在13到100之间生成1000个随机数。到目前为止,它只产生了我想要重复一千次的75%。这就是我到目前为止所拥有的:
Random rand = new Random();
for (int j = 0; j < 1000; j++)
{
int pick = rand.nextInt((87) + 13);
pick++;
}
为什么它不起作用?
答案 0 :(得分:4)
注意nextInt()
覆盖0 包含和指定值完全!因此,必须rand.nextInt(88)
才能使生成的最高int
为87.这是您想要的:
Random rand = new Random();
for (int j = 0; j<1000; j++)
{
int pick = rand.nextInt(88)+13;
}
答案 1 :(得分:1)
rand.nextInt(88) + 13;
应该为您提供13到100之间的数字,然后将它放在循环中。
答案 2 :(得分:0)
该行:
到目前为止,它只能产生我想要重复一千次的75%
真的不加我。这可能是你正在播种的问题。确保始终使用时间重新播种随机数。
但我同意阿卜杜勒的意见,你需要从括号中取出+13
:
rand.nextInt(87) + 13;
因为rand.nextInt((87) + 13)
与rand.nextInt((67) + 23)
的{{1}}相同,所以
但是如果你想要更多“真实”的随机性,那就看看一个叫做buzzhash的东西(虽然那是用于散列的;但是可以为数字修改)
答案 3 :(得分:0)
我在我的代码中使用了这个:
public static int randomInteger(int min, int max)
{
java.security.SecureRandom rand = new java.security.SecureRandom();
//get bounded [0, max) from nextInt()
int randomNum = rand.nextInt(max) + min;
return randomNum;
}
value = randomInteger(13,100); //13..99
value = randomInteger(13,101); //13..100