Kee*_*san 4 java random recursion
我想要一个只有4位数的密码.但是,小于1000的数字也会被打印出来.这段代码发生了什么?
import java.util.Random;
public class Util {
public static int getRandomPINNumber(){
Random randomGenerator = new Random();
int randomNo = randomGenerator.nextInt(10000);
if(randomNo < 1000)
getRandomPINNumber(); //repeat if it is less than 1000,some bug here
return randomNo;
}
public static void main(String[] args){
for(int i = 0;i<100; i++)
System.out.println(getRandomPINNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
产量
6413
1692
5734
105 <--- why 105 is getting printed, it should reevaluate the pin right?
4857
6348
1355
Run Code Online (Sandbox Code Playgroud)
问题是您没有返回递归调用的结果.将您的代码更改为:
public static int getRandomPINNumber(){
Random randomGenerator = new Random();
int randomNo = randomGenerator.nextInt(10000);
if(randomNo < 1000)
return getRandomPINNumber(); //repeat if it is less than 1000
return randomNo;
}
Run Code Online (Sandbox Code Playgroud)
当您第一次调用该函数并生成小于1000的数字时,您递归调用getRandomPINNumber但忽略返回值.
此外,你不应该new Random()多次打电话.调用一次并存储结果.
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |