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
相关产品推荐
相关产品推荐

