我有这个问题,我在生成数字作为for循环中的条件时观察到。 我在我的android程序中使用它。
当我这样做时:
String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
temp += i + " ";
}
我总是不超过100
但是当我这样做时:
for (int i = 0; i < 10; i++) {
temp += new Random().nextInt(1000) + " ";
}
我得到的真实随机数从0到999不等。
实际发生了什么?
我知道我可以这样做:
int x = new Random().nextInt(1000);
for (int i = 0; i < x; i++) {
temp += i + " ";
}
这确实会返回0-999的随机数。但我只想了解为什么第一个代码只返回不超过100的数字。
答案 0 :(得分:4)
for (int i = 0; i < new Random().nextInt(1000); i++) { // here upper limit of i will change time to time.
temp += i + " ";
}
。
for (int i = 0; i < 10; i++) { // here i increase up to 10
temp += new Random().nextInt(1000) + " ";
}
int x = new Random().nextInt(1000); // here x is random but this will never change while for loop is running
for (int i = 0; i < x; i++) {
temp += i + " ";
}
答案 1 :(得分:3)
在此代码中
for (int i = 0; i < new Random().nextInt(1000); i++) {
temp += i + " ";
}
对于循环的每次迭代,变量i递增1,但是在给定时间点i <100时,有可能随机生成小于'i'的数字,因此循环退出。 / p>
答案 2 :(得分:2)
你应该在循环之前初始化随机变量
int max = new Random().nextInt(1000);
String temp = "";
for (int i = 0; i < max; i++)
{ temp += i + " "; }
答案 3 :(得分:2)
Java Doc说:
返回一个伪随机数,在0之间均匀分布的int值 (包括)和指定值(不包括)
因此,i的值可能大于nextInt()
生成的随机值并且循环退出。
当你在for循环的每次迭代中使用nextInt(1000)
生成一个新的Random时,你不会得到一个固定的循环值,它会不断变化,你的输出也会不断变化。
String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) { //new random nextInt() called on each iteration
temp += i + " ";
}
注意:我的程序一直运行到64
答案 4 :(得分:1)
您的第一次实施......
for (int i = 0; i < new Random().nextInt(1000); i++) {
temp += i + " ";
}
在每次迭代结束时调用new Random().nextInt(1000)
以确定是否该结束循环。相同的代码可以重写如下:
int i = 0;
while (i < new Random().nextInt(1000)) {
temp += i + " ";
i++;
}
可能更好地说明为......
int i = 0;
while (true) {
if (i < new Random().nextInt(1000)) {
break;
}
temp += i + " ";
i++;
}
所以虽然i
的值不断增加,但与之比较的数字new Random().nextInt(1000)
却在不断变化。你的比较可能看起来像这样......
if (0 < 981) break;
if (1 < 27) break;
if (2 < 523) break;
if (3 < 225) break;
if (4 < 198) break;
if (5 < 4) break;
在上面的例子中,即使第一次调用new Random().nextInt(1000)
正在返回高达981
,循环也只发生5次,因为在第6次迭代开始时new Random().nextInt(1000)
返回4
,其当前值5
小于i
。
希望这有帮助!
答案 5 :(得分:0)
下面
String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
temp += i + " ";
}
我可能大于100但概率上实际上是不可能的。耶!
答案 6 :(得分:0)
“first for loop”可能会给出小于100但不总是的输出数字,它会给出一系列从0到随机数的数字,该数字由Random.nextInt(1000)方法返回强> ....
第1和第3个循环方法的工作原理相同......
但第二个将从0到999挑选9个随机数,答案如下,(373 472 7 56 344 423 764 722 554 800)