递归函数中的错误

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)

Tun*_*aki 8

问题是您没有返回递归调用的结果.将您的代码更改为:

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()多次打电话.调用一次并存储结果.