由于某种原因,这行代码int u=(int)Math.random()*6 + 1;
将仅返回1。
我发现它只是跳过整个(int)Math.random()*6
,并且只使用1,因为当我将其更改为2时,它只返回2。
任何人都知道发生了什么事
答案 0 :(得分:4)
将Math.random()
强制转换为int
的操作是在乘以6之前进行的。强制转换运算符的使用地址是higher precedence而不是*
。
Math.random()
方法返回一个介于0
(包括)和1
(不包括)之间的随机数,因此强制转换总是返回0
。
要提供适当的范围,请在强制转换前将Math.random()
乘以括号。 Math.random() * 6
的范围是0
(包括)到6
(不包括)。
int u = (int) (Math.random()*6) + 1;
答案 1 :(得分:0)
发生了什么事
Math.random()
返回一个带有正号的大于等于0.0且小于1.0的双精度值。(int)Math.random()
的成本是0
的两倍,因为类型转换的优先级比*
高。(int)Math.random()*6
始终是0
,您所拥有的一切。