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

Java双骰子模拟程序求非相同面次数平均值异常问题排查

问题排查与修正方案

你的代码里有几个关键逻辑错误,导致无法输出预期的平均值,我来一步步帮你拆解和修正:

1. 内层while循环的致命问题

你的内层while (j!= 1000)循环在第一次外层循环(i=0)时就会直接执行到j=1000,之后所有的外层循环里这个内层循环都不会再运行。更严重的是,当j初始为0时,average = (count/j)会触发除以0的运行时异常(虽然可能因循环执行顺序没立刻暴露,但逻辑完全错误)。

2. 平均值计算时机错误

平均值应该在所有1000次投掷完成后统一计算,而不是在每次投掷过程中反复执行无效计算。你当前的写法完全打乱了计算逻辑的顺序。

3. 多余变量j的冗余使用

外层循环已经明确执行了1000次(i从0到999),根本不需要额外用j来计数,直接用1000作为分母即可。


修正后的代码

int i = 0; 
int count = 0; 
double average = 0; 

// 完成1000次投掷逻辑
while (i < 1000) { 
    int dice1 = getRandom(1,6); 
    int dice2 = getRandom(1,6); 
    if (dice1 != dice2) { 
        count++; 
    } 
    i++; 
} 

// 所有投掷完成后再计算平均值
average = (double) count / 1000; 
System.out.println(average);

额外优化建议

可以用for循环让代码更简洁易读,同时避免变量初始化的冗余:

int count = 0; 
double average = 0; 

for (int i = 0; i < 1000; i++) {
    int dice1 = getRandom(1,6); 
    int dice2 = getRandom(1,6); 
    if (dice1 != dice2) { 
        count++; 
    }
}

// 注意强制转换为double,避免整数除法丢失小数部分
average = (double) count / 1000;
System.out.println(average);

内容的提问来源于stack exchange,提问作者clink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:28:32