Java开发中如何在ActionListener的switch case生成新随机数
问题根因
- 目标答案
Main.answer是类加载时就初始化的静态变量,仅在程序第一次启动时生成一次,重启逻辑没有更新这个值。 - 重启分支的逻辑不完整,仅重置了计数和提示文本,既没有重新生成随机数,也没有清空用户输入框。
HigherLowerGame类中定义的randomNumber属于冗余代码,全程没有被实际调用,游戏判断逻辑始终引用的是Main.answer这个固定初始值。
修复方案
- 直接在重启按钮的事件逻辑中补充生成新随机数、清空输入框的代码,不需要改动整体结构。
- 删除项目中没用的冗余导包和无用字段,避免编译异常。
- 顺带修复猜中时计数少算一次的小bug。
具体修改代码
找到HigherLowerGame类的actionPerformed方法,替换restart分支的逻辑:
case "restart": // 重置猜测计数 Main.guessCounter = 0; Main.guessValue.setText(String.valueOf(Main.guessCounter)); // 清空历史提示和输入框内容 Main.playerAnswer.setText(""); Main.playerGuess.setText(""); // 生成新的1-100随机答案 Main.answer = Main.ran.nextInt(100) + 1; break;
找到猜中逻辑的else分支,补充计数累加,避免次数统计错误:
else{ Main.guessCounter++; Main.guessValue.setText(String.valueOf(Main.guessCounter)); JOptionPane.showMessageDialog(null, "Nailed it! It took you " + Main.guessCounter + " guesses! The number was " + Main.answer ); }
可清理的冗余内容
- 删除
HigherLowerGame类中未使用的字段:Main obj = null;、Random ran = new Random();、int randomNumber = ran.nextInt(100) + 1; - 删除未使用的导包:
java.awt.EventQueue、javafx.scene.paint.Color、javax.swing.JFrame
改完之后点击重启按钮就会生成新的随机数,所有状态回归初始开局状态。
内容的提问来源于stack exchange,提问作者Miles
相关产品推荐
相关产品推荐

