You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:42:02