Java 生成循环的随机数

Java 生成循环的随机数,java,android,random,Java,Android,Random,我在for循环中生成数字作为条件时发现了这个问题。 我在我的android程序中使用它 当我这样做时: String temp = ""; for (int i = 0; i < new Random().nextInt(1000); i++) { temp += i + " "; } for (int i = 0; i < 10; i++) { temp += new Random().nextInt(1000) + " "; } String temp=”“;

我在for循环中生成数字作为条件时发现了这个问题。 我在我的android程序中使用它

当我这样做时:

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}
for (int i = 0; i < 10; i++) {
    temp += new Random().nextInt(1000) + " ";
}
String temp=”“;
对于(int i=0;i
我的收入总是不超过100英镑

但当我这么做的时候:

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}
for (int i = 0; i < 10; i++) {
    temp += new Random().nextInt(1000) + " ";
}
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 + " ";
}
int x=new Random().nextInt(1000);
对于(int i=0;i
这会返回0-999之间的随机数。但我只想理解为什么第一个代码只返回不超过100的数字。

在这段代码中

for (int i = 0; i < new Random().nextInt(1000); i++) {
     temp += i + " ";
}
for(int i=0;i

对于循环的每次迭代,变量i增加1,但在给定的时间点,在该时间点i您应该在循环之前初始化随机变量

int max =  new Random().nextInt(1000);
String temp = ""; 
for (int i = 0; i < max; i++)
 {      temp += i + " ";    }
int max=new Random().nextInt(1000);
字符串temp=“”;
对于(int i=0;i
for(int i=0;i

for(inti=0;i<10;i++){//这里我增加到10
temp+=new Random().nextInt(1000)+;
}

int x=new Random().nextInt(1000);//这里x是随机的,但当for循环运行时,这永远不会改变
对于(int i=0;i
Java文档说:

返回0到0之间的伪随机、均匀分布的int值 (含)和规定值(不含)

因此,i的值可能大于由
nextInt()
生成的随机值,循环退出

当您在for循环的每次迭代中使用
nextInt(1000)
生成一个新的随机变量时,您将无法获得循环的固定值,它将不断变化,输出也将不断变化

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) { //new random nextInt() called on each iteration
    temp += i + " ";
}
String temp=”“;
对于(int i=0;i
注意:我的程序一直运行到这里的
64

String temp = "";
for (int i = 0; i < new Random().nextInt(1000); i++) {
        temp += i + " ";
    }
String temp=”“;
对于(int i=0;i

我可能比100岁大,但很可能这几乎是不可能的。是啊

您的第一个实现

for (int i = 0; i < new Random().nextInt(1000); i++) {
    temp += i + " ";
}
这可以更好地解释为

int i = 0;
while (true) {
    if (i < new Random().nextInt(1000)) {
        break;
    }
    temp += i + " ";
    i++;
}
在上面的示例中,即使对
new Random().nextInt(1000)
的第一次调用返回了一个巨大的
981
,循环也只发生5次,因为在第6次迭代开始时,
new Random().nextInt(1000)
返回了
4
,它小于
5
的当前值
i

希望这有帮助

“第一个for循环”可能给出小于100的输出数,但并不总是如此,它将给出从0到随机数的一系列数字,随机数由random.nextInt(1000)方法返回。

第一个和第三个循环方法的工作原理相同


但是第二个将从0到999中选择9个随机数,答案是,(373 472 7 56 344 423 764 722 554 800)

第一个循环直到
i
大于一个随机数,并且在每次迭代中重新生成该随机数。第二个生成10个随机数。最后一个生成一个从0到随机数的数字序列。它们都是完全不同的,你还没有指定你想要做什么。事实上,我已经计算出来了,应该是186次中的1次。概率是999/1000*998/1000*…*900/10005.95e-6=实际上不可能:)+1,这是一个明确的解释,尽管randow是在每次迭代开始时创建的。我当时的想法是:for-loop语句的第三部分(增量)将是每次循环的唯一部分。我认为第二部分(condition语句)将运行一次,并具有与for循环的第一部分(initialization int I=0)相同的常量类型的条件。但我现在明白了循环的工作原理,谢谢!哦好的,谢谢,我明白了!!我认为for循环语句的第三部分(增量)将是每次循环的唯一部分。我认为第二部分(condition语句)将运行一次,并具有与for循环的第一部分(initialization int I=0)相同的常量类型的条件。非常感谢你!
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++;
}
if (0 < 981) break;
if (1 < 27) break;
if (2 < 523) break;
if (3 < 225) break;
if (4 < 198) break;
if (5 < 4) break;