如果随机数为负数,我该如何返回0?

时间:2014-01-31 01:48:14

标签: java random

num1,num2是随机数的边界,但如果num1大于num2,我希望结果为0。

int num1 = 5
int num2 = 1
int num3 = 10
Random rand = new Random();
    double num = 0;
    for (int i = 0; i < num3; i++) {
        int randNum = rand.nextInt((num2 - num1) + 1) + num1;
        num = num + randNum;
    // Adds the random number generated to num until it reaches the
    // max amount of numbers generated.
    }

    num = num / num3;
    if (num3 < 1 || num2 < num1){ 
        return 0;
    } else {
        return num;
    }

我认为最后一个if语句会起作用,但它一直给我一个错误,说明随机数不能为负数。

如果解决方案可能有点简单,因为我只是刚开始使用Java

非常感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:3)

因为(根据Javadocs

public int nextInt(int n)
  

参数:n - 要返回的随机数的界限。一定是   的阳性即可。返回:下一个伪随机数,均匀分布的int   该随机数的0(含)和n(不包括)之间的值   生成器的序列抛出: IllegalArgumentException - 如果n不是   阳性

返回伪随机,均匀分布的int值介于0(包括)和指定值(不包括)

之间

所以你需要先检查(num2 - num1) > 0

答案 1 :(得分:1)

您可以先通过num1到num2的比较来简化它,如果num1更大,则不要乱用任何数学。

将其移至顶部:

if (num3 < 1 || num2 < num1){ 
    return 0;

再看一下你的代码,当num3增加时,你的结果会接近(num2-num1)/ 2。只是想知道你在这做什么?

答案 2 :(得分:-1)

您没有使用num1和num2作为边界。如果应该是

randNum = rand.nextInt(num1, num2);

也是你的条件

if(num1 > num2)

应该是你方法中的第一个。