2016-01-11 192 views
3

新手的问题在这里: 我尝试使用此代码创建一个随机数Java的随机数

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

然而,打印到屏幕

时,我一直在接受0作为答案

只把括号像这样后

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

是否正确显示数字。 任何人都可以解释我错过了这个逻辑原因吗?

回答

3

代码

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 
3

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

5

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

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

所以你得到0,因为随机数是0和1之间,并转换成一int使得它等于0。

2

其他的答案已经在你的代码解释这个问题,所以我不会在这里介绍这个话题了。

这是刚上一代随机数字的便条:
在java中产生随机数的推荐的方法是不Math.random(),而是通过java.util.Random类(http://docs.oracle.com/javase/7/docs/api/java/util/Random.html)。

要生成一个随机数字,如在上面的例子中,你可以使用此代码:

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

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

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

相当于

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

考虑到数学。随机的()0 < = N < 1返回一个数字,如果您尝试施放它,你总是会得到0,即乘以10还是0

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

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