为什么我的方法有时打印多行?

时间:2017-11-07 05:34:26

标签: java random systemtime

所以我有这个方法

public int sumMathRandomAndSystemTime(){

    n = 1 + ((int) (Math.random() * 10)+ 
            (int) (System.currentTimeMillis() % 10));

    if(n > 10){
        sumMathRandomAndSystemTime();
    }
    System.out.println(n);
    return n;

}  

我想要的只是在1到10之间打印一个随机数(n)。但由于某种原因,当我调用该方法时,它会打印一个随机数,但有时只打印一次,有时会打印出10次,5次等数字。为什么会这样?

这是我输出的一个例子

10
10
10
10
10

3 个答案:

答案 0 :(得分:3)

如果原始随机数大于10,则代码将打印多行:每次递归调用一行。

您可以按照以下方式更改代码以解决此问题:

public int sumMathRandomAndSystemTime(){
    Random random = new Random();
    int n = random.nextInt(10);
    System.out.println(n);
    return n;
}

一般而言,更简单的代码是:

int a = 0987654321;
printf("%d",a);

答案 1 :(得分:1)

如果您只想打印1到10之间的一个随机数,请尝试这样的事情......

        int n;
        do
        {
          n = 1 + ((int) (Math.random() * 10) + (int) (System.currentTimeMillis() % 10));
        } while(n > 10);

        return n;

答案 2 :(得分:1)

在sumMathRandomAndSystemTime()之后添加return语句;呼叫。

public static int sumMathRandomAndSystemTime(){
    n = 1 + ((int) (Math.random() * 10)+ 
            (int) (System.currentTimeMillis() % 10));
    if(n > 10){
        sumMathRandomAndSystemTime();
        return n;
    }
    System.out.println(n);
    return n;
}  
可能这张图片可以清除流程。

enter image description here