Java中调用Math.random()的createDice方法为何始终返回1?
问题排查&解决
问题出在Java运算符优先级上,强制类型转换(int)的优先级高于乘法运算符*,你的代码执行顺序是:
- 先执行
(int) Math.random():Math.random()返回的是[0.0, 1.0)区间的双精度浮点数,转int后结果永远是0 - 再执行
0 * 6,结果为0 - 最后执行
0 +1,返回值永远是1,和你遇到的现象完全吻合。
修复方案
把随机数和乘法的部分整体用括号包裹,先计算出[0.0,6.0)区间的浮点数,再做强制类型转换即可,修改后的代码如下:
//returns new dice (number between 1 and 6) public int createDice () { int dice = (int) (Math.random()*6) +1; return dice; }
如果想要更稳定可控的随机数生成逻辑,也可以用Random类实现,写法如下:
import java.util.Random; public class Dice { private Random random = new Random(); public int createDice () { // nextInt(6)返回[0,5]区间的整数,加1后得到[1,6] return random.nextInt(6) + 1; } }
内容的提问来源于stack exchange,提问作者Hans WarVeganer
相关产品推荐
相关产品推荐

