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;