首先,Math是java.lang包中自带的一个类,它的作用主要是提供一些与数学计算相关的方法
其中Math.random()方法的作用就是:(以下语句摘自API)
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
也就是说,当你调用Math.random()方法的时候,该方法会返回一个double类型的值
这个值是随机产生的,并且这个值的范围在0~1之间
下面再来看看你这行代码吧:[code=java]score=(int()(Math.random()*101);[/code]为了方便理解,我们把它拆成3行代码来看,这3行代码和那行代码的含义完全相同:[code=java]double random = Math.random(); //此时random是一个0~1之间的随机小数
double scoreDouble = random * 101; //此时scoreDouble是一个0~101之间的随机小数
int score = (int)scoreDouble; //将double类型的数字强制转换成int类型的数字,并赋值给Score[/code]所以,这行代码的作用就是:
随机产生一个0~100之间的整数,并将其赋值给score变量(也就是成绩)
TIPS:
其实上面的解释中,还隐含了两个疑问
第一个疑问就是:为什么要把double类型的值赋值给int类型的变量时,需要在前面加上(int)呢
这是因为,double类型的数据中包含了整数和小数部分,而int类型的数据只包含整数部分
所以,如果将double类型的值赋值给int类型的变量的话,就会丢失掉后面的小数部分的值
这里的“丢失后面小数部分的值”,用术语来说,就叫做“丢失精度”
而在JAVA中,如果将一个值赋值给一个变量时会丢失精度的话,JAVA就要求必须进行类型转换
也就是说,你必须首先手动将double类型的值转变成int类型的值,才能赋值给int类型的变量
这种转换的方式就是在前面加上int()或者(int)就可以了,其中的int就代表你要将这个值转换成的类型
而第二个疑问就是:既然要获取0~100之间的整数,那为什么要让random乘以101呢?
首先,通过Math.random()方法可以随机获得0~1之间的一个小数,但是这个随机小数的范围不包含1
其次,当你通过(int)方式将double类型的数据转换成int类型的数据时,后面的小数部分不会四舍五入,而是直接被抹去
所以,由于你通过Math.random()方法获取的是一个必定小于1的小数
所以当你让这个小数乘以101的话,得到的结果就是一个必定小于101的小数
这样,当小数部分被抹去的时候,你所得到的数字就是0到100的整数了,其中就包括了0和100
[ 本帖最后由 李叶 于 2011-08-31 16:28 编辑 ] |