新手的问题在这里: 我尝试使用此代码创建一个随机数Java的随机数
int rand = (int) Math.random()*10;
然而,打印到屏幕
时,我一直在接受0作为答案只把括号像这样后
int rand = (int)(Math.random()*10);
是否正确显示数字。 任何人都可以解释我错过了这个逻辑原因吗?
新手的问题在这里: 我尝试使用此代码创建一个随机数Java的随机数
int rand = (int) Math.random()*10;
然而,打印到屏幕
时,我一直在接受0作为答案只把括号像这样后
int rand = (int)(Math.random()*10);
是否正确显示数字。 任何人都可以解释我错过了这个逻辑原因吗?
代码
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
Math.random()
返回一个double
0到1之间的数字,这意味着(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。
其他的答案已经在你的代码解释这个问题,所以我不会在这里介绍这个话题了。
这是刚上一代随机数字的便条:
在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);
,这将产生相同的结果你的代码。
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