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

Java模拟双骰子投掷:统计掷出同点数前次数的代码问题

修复你的双骰子投掷模拟程序

我来帮你排查下代码里的问题,顺便给出修正方案:

首先,你的代码存在几个关键问题:

  • 死循环无法终止:你的while(true)没有退出条件,就算掷出相同点数,程序也会一直跑下去,而且每次循环都打印count,这和你想要的「只在掷出同点数时输出一次计数器」不符。
  • 不存在getRandom(1,6)方法:Java标准库没有这个现成方法,得用标准的随机数生成方式来获取1-6的点数。
  • 逻辑顺序错误:你现在不管骰子是否相等都会打印count,正确逻辑应该是:点数不同时累加计数器,点数相同时输出计数器并结束程序。

下面是修正后的完整代码:

import java.util.Random;

public class DiceSimulator {
    public static void main(String[] args) {
        Random random = new Random();
        int count = 0;
        
        while (true) {
            // 生成1-6的随机点数:nextInt(6)生成0-5,加1后转为1-6
            int dice1 = random.nextInt(6) + 1;
            int dice2 = random.nextInt(6) + 1;
            
            if (dice1 != dice2) {
                count++;
            } else {
                // 掷出同点数,输出结果并终止循环
                System.out.println("掷出同点数前的投掷次数:" + count);
                break;
            }
        }
    }
}

关键修改说明:

  1. 替换随机数生成逻辑:用Random类的nextInt(6)+1生成1-6的点数,这是Java标准的随机整数生成方式。如果是多线程场景,也可以用更高效的ThreadLocalRandom:
    import java.util.concurrent.ThreadLocalRandom;
    // ...
    int dice1 = ThreadLocalRandom.current().nextInt(1, 7); // 直接生成1-6的整数
    
  2. 添加循环终止条件:在骰子点数相等的分支里,打印计数器后用break跳出死循环,程序正常结束。
  3. 调整打印时机:只在触发「同点数」条件时打印结果,符合你的需求。

这样程序就能按照预期运行啦~

内容的提问来源于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:19:51