Java 随机输入?

Java 随机输入?,java,random,type-conversion,parentheses,Java,Random,Type Conversion,Parentheses,查看了这个站点上的问题,没有找到我想要的关于将Math.random()方法从double转换为int的类型转换的答案。 我的问题是,为什么Math.random只返回不带括号的0,而当它包含在括号内时,它返回随机数? 代码的第一部分返回0: int number; number = (int) Math.random() * 10; System.out.println("\nThe random number is " + number); 但是,该代码适用于以下情况: int num

查看了这个站点上的问题,没有找到我想要的关于将
Math.random()
方法从double转换为int的类型转换的答案。 我的问题是,为什么
Math.random
只返回不带括号的0,而当它包含在括号内时,它返回随机数? 代码的第一部分返回0:

int number; 
number = (int) Math.random() * 10; 
System.out.println("\nThe random number is " + number);
但是,该代码适用于以下情况:

int number; 
number = (int) (Math.random() * 10); 
System.out.println("\nThe random number is " + number);
应该注意的是,我看到了一些关于类型转换的不同代码,其中一些程序员似乎同时使用两种转换方式。

此代码:

number = (int) Math.random() * 10; 
首先计算如下:

(int) Math.random()
由于
Math.random()
返回一个从0到但不包括1的数字,如果将其强制转换为int,它将向下舍入为0。然后将10乘以0,得到0。

Math.random()返回一个从0到1的数字。您希望将(Math.random()*10)的结果强制转换为int,而不是从Math.random本身获得的数字。
数字向下舍入。因此,例如,可以从Math.random获得的0.3四舍五入为0。同样,您希望将结果四舍五入为0.3乘以10,即3。括号很重要。

@Hovercraft,所以在进行类型转换之前,先将Math.Random放在括号中,然后再计算随机数?因此,如果随机数是,比如说0.5,0.5 x 10将得到5,那么它将类型转换为int,同时不会通过截断丢失任何关键的十进制值?使用java.util.random而不是Math.random有两个优点。它允许强制种子,这对测试和调试很重要。它有一个nextInt(int)方法,可以更直接地完成您想要做的事情。我在另一个SO问题上读到了这一点,但我只是在阅读Oracle Java课程的教程,其中使用了Math.Random作为示例。我个人在教程中使用了你提到的方法。虽然我不太了解强制种子是什么以及测试的好处。种子是告诉随机数生成器在其数字序列中从何处开始的参数。如果基于时间,如果故障路径取决于随机数,则再现测试故障可能存在问题。java.util.Random有一个构造函数,可用于指定种子。从同一个种子开始,你会得到相同的数字序列。啊,我明白了。所以括号基本上告诉编译器转换存储的Math.random结果,而不是它自己生成的数字?所有这些对我来说都是全新的,因为我以前认为括号只用于参数或算术顺序优先。