如何用Java为猜数字游戏新增每猜错生成新随机数的第二关并修复联动问题
代码存在的核心问题
- 主逻辑流程错误:你的
main方法每次拿到用户输入后,会连续调用2次第一关的guess()方法,再判断返回值决定是否调用第二关guess2(),完全没有区分「第一关进行中」和「第一关通关进入第二关」的状态,逻辑完全混乱。 - 缺少关卡状态标记:
Game类中没有字段记录当前所处关卡,无法在第一关通关后自动切换到第二关规则。 - 第一关通关逻辑错误:第一关猜对后你将
gameOver设为false,相当于第一关永远不会结束,循环会一直走第一关的判断逻辑。 - 猜测次数未隔离:
numberOfGuess字段全局共用,第一关消耗的猜测次数会直接累计到第二关,导致第二关的5次机会计算错误。
修复方案
1. 修改Game类
增加关卡标记字段,调整通关逻辑,统一猜测入口,隔离两关的计数和随机数规则:
package guessing_game; import java.util.Random; public class Game { Random random = new Random(); private boolean gameOver; private int secretNumber; private int numberOfGuess; // 新增关卡标记:1代表第一关,2代表第二关 private int currentLevel; public Game(int range) { gameOver = false; secretNumber = random.nextInt(10); numberOfGuess = 0; currentLevel = 1; // 初始为第一关 } public boolean isGameOver() { return gameOver; } // 统一猜测入口,根据当前关卡走对应逻辑 public void doGuess(int n) { if (gameOver) { System.out.println("The game is over. You can not guess again."); return; } if (currentLevel == 1) { level1Guess(n); } else { level2Guess(n); } } // 第一关逻辑 private void level1Guess(int n) { if (n == secretNumber) { System.out.println("You guessed right! let's go to next level."); // 第一关通关,初始化第二关参数 currentLevel = 2; numberOfGuess = 0; secretNumber = random.nextInt(10); } else { if (n < secretNumber) { System.out.println("Your guess is too low."); } else { System.out.println("Your guess is too high."); } numberOfGuess++; if (numberOfGuess == 5) { System.out.println("You have used up all of your guesses."); gameOver = true; } } } // 第二关逻辑 private void level2Guess(int n) { if (n == secretNumber) { System.out.println("You guessed right! You win the game!"); gameOver = true; } else { System.out.println("Your guess is not right."); // 猜错直接刷新随机数 secretNumber = random.nextInt(10); numberOfGuess++; if (numberOfGuess == 5) { System.out.println("You have used up all of your guesses."); gameOver = true; } } } }
2. 修改主类逻辑
简化主流程,每次调用统一的猜测入口即可:
package guessing_game; import java.util.Scanner; public class Guessing_game { public static void main(String[] args) { Scanner input = new Scanner(System.in); Game theGame = new Game(10); while(!theGame.isGameOver()){ System.out.println("Guess a number between 0 and 10:"); int n = input.nextInt(); theGame.doGuess(n); } input.close(); } }
内容的提问来源于stack exchange,提问作者ahhmedsalama
相关产品推荐
相关产品推荐

