Java 带有Math.random()的表达式始终返回相同的值
出于某种原因,这行代码Java 带有Math.random()的表达式始终返回相同的值,java,casting,Java,Casting,出于某种原因,这行代码intu=(int)Math.random()*6+1将仅返回1作为结果 我发现它只是跳过了整个(int)Math.random()*6,并且只使用了1,因为当我将其更改为2时,它只返回了2 有人知道发生了什么吗?将Math.random()转换为int发生在乘以6之前。强制转换运算符的值小于* Math.random()方法返回一个介于0(包含)和1(排除)之间的随机数,因此强制转换总是返回0 要提供正确的范围,请通过插入括号在强制转换之前乘以Math.random()。
intu=(int)Math.random()*6+1代码>将仅返回1作为结果
我发现它只是跳过了整个(int)Math.random()*6
,并且只使用了1,因为当我将其更改为2时,它只返回了2
有人知道发生了什么吗?将Math.random()
转换为int
发生在乘以6之前。强制转换运算符的值小于*
Math.random()
方法返回一个介于0
(包含)和1
(排除)之间的随机数,因此强制转换总是返回0
要提供正确的范围,请通过插入括号在强制转换之前乘以Math.random()
。Math.random()*6
的范围是0
(包含)到6
(排除)
将Math.random()
转换为int
发生在乘以6之前。强制转换运算符的值小于*
Math.random()
方法返回一个介于0
(包含)和1
(排除)之间的随机数,因此强制转换总是返回0
要提供正确的范围,请通过插入括号在强制转换之前乘以Math.random()
。Math.random()*6
的范围是0
(包含)到6
(排除)
正在发生的事情:
Math.random()
返回一个带正号的双精度值,大于或等于0.0,小于1.0
(int)Math.random()
将双倍值消耗为0
,因为类型转换比*
具有更高的优先级
(int)Math.random()*6
总是0
,你得到你所拥有的
正在发生的事情:
Math.random()
返回一个带正号的双精度值,大于或等于0.0,小于1.0
(int)Math.random()
将双倍值消耗为0
,因为类型转换比*
具有更高的优先级
(int)Math.random()*6
总是0
,你得到你所拥有的
int u = (int) (Math.random()*6) + 1;