初学者问题: 我尝试使用以下代码创建随机数:
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()
返回一个介于0和1之间(不包括0和1)的双精度浮点数,这意味着 (int)Math.random()
总是返回0(因为 Math.random() < 1
)。为了在强制转换为整数之前执行乘法运算,必须像您所做的那样使用括号。
int rand = (int) Math.random()*10;
等同于
int rand = ((int) Math.random()) * 10;
Math.random()
的值被转换为一个int
。由于该值介于0和1之间(1不包括在内),因此它总是被转换为0。(int) Math.random()*10 --> ((int) Math.random()) * 10 --> 0 * 10 --> 0
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;
考虑到 Math.random() 返回的是 0<=N<1 的数字,如果你试图将其转换,你总会得到 0,即使乘以 10 仍然是 0
int rand = ((int) Math.random()); -- ALWAYS --> ZERO
0*N ---- ALWAYS ---> ZERO