如何在Java循环中保存随机数并实现位置超100回退逻辑?
代码问题排查与修复方案
存在的逻辑与代码问题
- 重复冗余分支:代码中多次重复
Dice1 == 5和Dice1 == 4的判断,后面的重复分支永远不会被执行,属于无效代码。 - 位置回退的显示错误:当前逻辑先修改位置并打印,再判断是否超过100回退,会导致用户看到错误的超出数值(比如先显示102,实际回退到97,但错误数值已被输出)。
- 变量命名不规范:不符合Java小驼峰命名规范(如
Position1应改为position1,Scan应改为scanner等)。 - 输入大小写敏感:仅支持小写
"start"启动游戏,输入大写或首字母大写会直接退出。 - 代码冗余度极高:每个骰子点数的分支逻辑几乎完全一致,没必要逐个点数编写分支。
- 胜利逻辑不够清晰:当位置恰好等于100时,打印提示后循环虽会终止,但可更明确地处理退出流程。
修复后的代码
import java.util.Scanner; import java.util.Random; public class BoardGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Random random = new Random(); int position1 = 0; System.out.println("Type Start"); String input = scanner.next(); // 兼容大小写的启动指令判断 if (input.equalsIgnoreCase("start")) { while (position1 != 100) { int dice1 = random.nextInt(1, 7); System.out.println("掷出点数:" + dice1); // 先计算新位置,再判断是否超出100 int newPosition = position1 + dice1; if (newPosition > 100) { System.out.println("点数超出,位置保持:" + position1); } else { position1 = newPosition; System.out.println("当前位置:" + position1); // 触发胜利逻辑时直接退出循环 if (position1 == 100) { System.out.println("U Win"); break; } } System.out.println("player 1 turn"); scanner.next(); } } scanner.close(); // 关闭Scanner避免资源泄漏 } }
关键修改说明
- 合并冗余逻辑:删除重复的骰子点数判断,统一处理所有点数的计算与判断。
- 调整位置判断顺序:先计算新位置,判断是否超过100后再决定是否更新,避免输出错误的超出数值。
- 规范变量命名:全部改为Java小驼峰命名法,提升代码可读性与规范性。
- 兼容大小写输入:使用
equalsIgnoreCase判断启动指令,支持Start/START等多种输入格式。 - 简化代码结构:将重复的打印、输入操作统一提取到分支外,减少冗余代码。
- 明确资源管理:添加
scanner.close()关闭输入流,避免资源泄漏。 - 清晰胜利退出:当位置达到100时,打印胜利提示后直接
break退出循环,逻辑更直观。
内容的提问来源于stack exchange,提问作者Kareem Nabil
相关产品推荐
相关产品推荐

