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; } } } }
关键修改说明:
- 替换随机数生成逻辑:用
Random类的nextInt(6)+1生成1-6的点数,这是Java标准的随机整数生成方式。如果是多线程场景,也可以用更高效的ThreadLocalRandom:import java.util.concurrent.ThreadLocalRandom; // ... int dice1 = ThreadLocalRandom.current().nextInt(1, 7); // 直接生成1-6的整数 - 添加循环终止条件:在骰子点数相等的分支里,打印计数器后用
break跳出死循环,程序正常结束。 - 调整打印时机:只在触发「同点数」条件时打印结果,符合你的需求。
这样程序就能按照预期运行啦~
内容的提问来源于stack exchange,提问作者clink
相关产品推荐
相关产品推荐

