Java随机数

Java random number

这里是初学者问题: 我尝试使用此代码创建一个随机数

int rand = (int) Math.random()*10;

但是,打印到屏幕时我一直收到 0 作为答案

只有像这样加上括号后

int rand = (int)(Math.random()*10);

号码显示正确吗? 谁能解释我错过的逻辑原因?

Math.random() returns 一个介于 0 和 1 之间的 double 数字,这意味着 (int)Math.random() 将始终为 0(因为 Math.random() < 1)。为了在转换为 int 之前执行乘法,您必须像以前一样使用括号。

当你写 int rand = (int) Math.random()*10 时,你实际上是在写:

int rand = ((int) Math.random()) * 10;

因此你得到 0,因为随机数在 0 和 1 之间,并将其转换为 int 使其等于 0。

密码

int rand = (int) Math.random()*10;

相当于

int rand = ((int) Math.random()) * 10; 

因此 Math.random() 的值被转换为 int。因为该值 介于 0 和 1 之间(不包括 1),所以它 被转换 总是 为零

所以

(int) Math.random()*10 -->  ((int) Math.random()) * 10 --> 0 * 10 --> 0

其他答案已经用你的代码解释了这个问题,所以我不再讨论这个话题。

这只是关于random-numbers生成的注释:
在 java 中生成 random-numbers 的推荐方法不是 Math.random() ,而是通过 java.util.Random class (http://docs.oracle.com/javase/7/docs/api/java/util/Random.html).

要生成如上例所示的 random-number,您可以使用以下代码:

Random rnd = new Random();
int i = rnd.nextInt(10);

,这将产生与您的代码相同的结果。

int rand = (int) Math.random()*10;

相当于

int rand = ((int) Math.random())*10;

考虑到 Math.random() return 一个从 0<=N<1 的数字,如果你尝试转换它你总是会得到 0,乘以 10 仍然是 0

int rand = ((int) Math.random()); -- ALWAYS --> ZERO

0*N ---- ALWAYS ---> ZERO