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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:07