这个陈述在Java中是否合法

时间:2016-05-23 00:24:48

标签: java

num1 = randomNum.nextInt(20);
num2 = randomNum.nextInt(num1);

当我跑这个时,我得到了 "线程中的异常" main" java.lang.illigalArgumentException:bound必须是正确的 在java.util.Random.nextInt(Uknown Source)
在EquationMin.main(EquationMin.java:19)

1 个答案:

答案 0 :(得分:5)

理论上/从语法-POV:是

但问题是:

  

[Random#nextInt(int)]返回从该随机数生成器序列中提取的伪随机,均匀分布的int值,介于0(包括)和指定值(不包括)之间。

来自docs。这意味着num1实际上可能会变为0.但是

  

[Random#nextInt(int)]抛出:       IllegalArgumentException - 如果n不是正数

由于每个定义0不为正,因此会产生IllegalArgumentException

最简单的解决方法是简单地在参数中添加1:

num1 = randomNum.nextInt(20);
num2 = randomNum.nextInt(num1 + 1);

确保nextInt的第二次调用的参数永远不会变为0.而是可以定义下限,例如Math.max(num1, 1)或其他任何内容。