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

掷骰子直到出现蛇眼:代码逻辑错误及结果打印问题求助

解决蛇眼掷骰程序的两个问题

看起来你在写这个蛇眼掷骰子的作业程序时,遇到了两个典型的随机数调用问题,我来帮你拆解原因和修复方案:

问题根源分析

你的两个问题其实是同一个核心原因导致的:每次调用CastDie1()和CastDie2()都会生成一个全新的随机数。

  • 第一个问题:当你在if条件里写if (CastDie1() == 1 && CastDie2() == 1)时,你实际上连续调用了两次骰子方法——第一次调用CastDie1()得到1,但第二次调用CastDie2()可能已经不是1了(反之亦然),所以条件永远无法稳定触发,全靠随机运气碰。
  • 第二个问题:打印结果时如果再次调用这两个方法,比如System.out.println("结果:" + CastDie1() + " 和 " + CastDie2()),这会再次生成新的随机数,和你之前判断的结果完全不是同一轮的。

修复后的完整代码

我们只需要每次掷骰子时先把结果存储到变量中,之后的判断和打印都复用这些变量,就能一次性解决两个问题:

import java.util.Random;

public class SnakeEyesCount {
    // 全局复用一个Random实例,避免短时间重复创建导致的随机数异常
    private static final Random diceRandom = new Random();

    // 单个骰子的掷骰逻辑,两个骰子逻辑完全一致,没必要写两个方法
    public static int castDie() {
        return diceRandom.nextInt(6) + 1; // 生成1-6的随机数
    }

    public static void main(String[] args) {
        int totalRolls = 0;

        while (true) {
            totalRolls++;
            // 关键:先完成一轮掷骰,把结果存到变量里
            int die1 = castDie();
            int die2 = castDie();

            // 打印当前轮的掷骰结果(包含蛇眼)
            System.out.println("第" + totalRolls + "次掷骰:" + die1 + " 和 " + die2);

            // 用变量判断蛇眼,确保是同一轮的结果
            if (die1 == 1 && die2 == 1) {
                System.out.println("成功掷出蛇眼!总共掷了" + totalRolls + "次");
                break; // 结束循环
            }
        }
    }
}

关键改动说明

  • 合并了重复的CastDie1()和CastDie2()方法,因为两个骰子的逻辑完全相同,减少代码冗余。
  • 使用全局的Random实例,避免每次调用方法都创建新实例导致的随机数重复问题。
  • 每轮循环先完成掷骰并存储结果,后续的打印和判断都复用这两个变量,确保是同一轮的掷骰数据。
  • 增加了掷骰次数统计,让程序输出更完整直观。

这样修改后,两个问题就都解决了:判断条件会准确识别蛇眼,打印的结果也和判断的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:33