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

Java实现无跳转语句的猜数字游戏:含异常处理与5次尝试限制

猜数字游戏代码修正需求
  • 系统随机生成1-99(含)的数字
  • 用户拥有5次尝试机会,猜对则显示“success”
  • 循环中禁止使用break、continue、return
  • 通过try-catch、if-else处理异常:输入非int类型触发InputMismatchException,或输入超出范围时,仅提示重新输入,不扣除尝试次数
  • 每次尝试后需显示当前尝试进度及数字范围,示例格式如下:
(1/5) 0 < ? < 100 : 50
(2/5) 50 < ? < 100 : 75
(3/5) 50 < ? < 75 :

用户原代码

import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Random r = new Random();
        int nbGenere = r.nextInt(100); 
        int nb1; // first number from user
        int nb2; // second number from user
        int borneMini; // minimum
        int borneMax; // max
        boolean valide1 = false; // variable do #1
        boolean valide2 = false; // variable do #2
        System.out.println(nbGenere);
        System.out.print("You got 5 tries to find a number 1 and 99 (inclusive)\n(1/5) 0 < ? < 100: ");
        do { // do #1
            try {
                nb1 = scan.nextInt();
                borneMini = 0;
                borneMax = 100;
                valide1 = nb1 > borneMini && nb1 < borneMax;
                if (!valide1)
                    System.out.print("Enter a valide number 1\n(1/5)" + borneMini + " < ? < " + borneMax + ": ");
                else if (nb1 == nbGenere)
                    System.out.print("Success!");
                else if (nb1 < nbGenere)
                    System.out.print("(2/5) " + nb1 + " < ? < 100: ");
                else
                    System.out.print("(2/5) 0 < ? < " + nb1 + ": ");
            } catch (InputMismatchException e) {
                System.out.print("Enter a valide number 2\n(1/5)" + borneMini + " < ? < " + borneMax + ": ");
                scan.nextLine();
            }
            do { // #2
                try {
                    nb2 = scan.nextInt();
                    if (nb1 < nbGenere)
                        borneMini = nb1;
                    else
                        borneMini = 0;

                    if (nb1 > nbGenere)
                        borneMax = nb1;
                    else
                        borneMax = 100;

                    valide2 = ((nb1 > nb2 || nb1 < nb2) && nb1 > borneMini && nb1 < borneMax);
                    if (!valide2)
                        System.out.print("Enter a valide number 3\n(2/5)" + borneMini + " < ? < " + borneMax + ": ");
                    else if (nb2 == nbGenere)
                        System.out.print("success!");
                    else if (nb1 > nb2 )
                        System.out.print();
                } catch (InputMismatchException f) {
                    System.out.print("Enter a valide number 4\n(2/5");
                }
            } while (!valide2);
        } while (!valide1);
    }
}

修正后的代码

import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

public class GuessNumberGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        // 生成1-99的随机数
        int targetNumber = random.nextInt(99) + 1;
        int minRange = 0;
        int maxRange = 100;
        int attemptCount = 1;
        boolean gameOver = false;

        System.out.println("你有5次机会猜1-99之间的数字");
        // 外层循环控制5次尝试机会,用布尔变量控制结束
        while (attemptCount <= 5 && !gameOver) {
            boolean isValidInput = false;
            int userGuess = 0;

            // 内层循环处理输入验证,无效输入不消耗尝试次数
            while (!isValidInput) {
                try {
                    // 按要求格式打印进度和范围
                    System.out.printf("(%d/5) %d < ? < %d : ", attemptCount, minRange, maxRange);
                    userGuess = scanner.nextInt();

                    // 验证输入是否在当前范围内
                    if (userGuess <= minRange || userGuess >= maxRange) {
                        System.out.println("请输入符合当前范围的数字");
                    } else {
                        isValidInput = true;
                    }
                } catch (InputMismatchException e) {
                    System.out.println("请输入有效的整数");
                    scanner.nextLine(); // 清除输入缓存中的无效内容
                }
            }

            // 判断猜测结果
            if (userGuess == targetNumber) {
                System.out.println("success");
                gameOver = true;
            } else {
                // 更新数字范围
                if (userGuess < targetNumber) {
                    minRange = userGuess;
                } else {
                    maxRange = userGuess;
                }
                // 仅有效输入才消耗尝试次数
                attemptCount++;
            }
        }

        // 5次机会用完且未猜对的提示
        if (!gameOver) {
            System.out.println("机会用完,正确数字是:" + targetNumber);
        }
        scanner.close();
    }
}

修改说明

  • 修正随机数生成逻辑:原代码生成0-99的数字,改为random.nextInt(99)+1生成符合要求的1-99数字
  • 重构循环逻辑:用外层循环控制5次尝试,内层循环处理输入验证,通过gameOver和isValidInput布尔变量控制循环结束,符合禁止使用break/continue/return的要求
  • 统一输入验证:将异常处理和范围验证合并到内层循环,无效输入不消耗尝试次数
  • 修复变量初始化问题:解决原代码中异常处理时变量未初始化导致的错误
  • 规范输出格式:严格按照示例格式打印进度和范围,统一提示语为中文
  • 优化代码结构:删除冗余变量,使用更清晰的变量名提升可读性
  • 补充游戏结束逻辑:当5次机会用完且未猜对时,提示正确数字

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:10:31