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

Java版Craps骰子游戏二次掷骰代码无法运行求助

问题分析与修复方案

你的代码存在两个核心问题导致重掷逻辑失效:

1. 重掷时未生成新的骰子点数

在while循环里,你一直复用首次掷骰的dice1和dice2计算点数,没有调用rnd.nextInt()生成新的随机数,导致每次循环的点数都和初始点数一致,直接触发了赢的条件。

2. 第一个if语句存在语法错误

第一个if条件后没有用大括号包裹多行代码,还多了一个多余的闭合括号,会导致逻辑混乱——比如不管是否掷出2/3/12,都会打印"You lose!"。


修复后的完整代码

import java.util.Random;

public class CrapsGame {
    public static void main(String[] args) {
        Random rnd = new Random();
        int dice1 = rnd.nextInt(6) + 1;
        int dice2 = rnd.nextInt(6) + 1;
        int roll = dice1 + dice2;
        System.out.println("\n dice 1 = " + dice1 + " dice 2 = " + dice2);

        System.out.println("Rolling dice....");
        int crapsRoll = roll;

        // 首回合输的逻辑,修复语法错误
        if (crapsRoll == 2 || crapsRoll == 3 || crapsRoll == 12) {
            System.out.println("Your score is " + crapsRoll);
            System.out.println("You lose!");
        } 
        // 首回合赢的逻辑
        else if (crapsRoll == 7 || crapsRoll == 11) {
            System.out.println("Your score is " + crapsRoll);
            System.out.println("You win!");
        } 
        // 进入重掷阶段
        else {
            System.out.println("Your score = " + crapsRoll);

            while (true) {
                // 重掷时生成新的随机骰子点数
                int newDice1 = rnd.nextInt(6) + 1;
                int newDice2 = rnd.nextInt(6) + 1;
                int nRoll = newDice1 + newDice2;
                System.out.println("\n You rolled = " + nRoll + " (dice1: " + newDice1 + ", dice2: " + newDice2 + ")");

                if (nRoll == crapsRoll) {
                    System.out.println("You win!");
                    break;
                }
                if (nRoll == 7) {
                    System.out.println("You lose!");
                    break;
                }
                // 未分出胜负,继续重掷
                System.out.println("Rolling again...");
            }
        }
    }
}

关键修复点说明

  • 生成新点数:在while循环内每次调用rnd.nextInt(6)+1生成新的骰子值,保证重掷的随机性。
  • 修复语法错误:给第一个if语句添加大括号,改用else if串联条件分支,避免逻辑混乱。
  • 简化判断逻辑:去掉冗余的点数大小判断,只要不是赢或输的情况,直接打印提示继续循环。
  • 增加过程可视化:重掷时显示具体的两个骰子数值,方便追踪游戏过程。

修复后运行代码,当初始点数为4时,会不断重掷直到掷出4(赢)或7(输),完全符合Craps游戏规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:05:26