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

Java实现两随机数求和校验用户输入时大数场景失效问题求助

问题核心错误

你对Scanner.hasNextInt()方法的用法理解错了:sc.hasNextInt(answer)的作用不是校验用户输入值是否等于answer,这个方法的入参代表解析数字用的进制基数(radix),只会判断下一段输入能不能按你传入的进制解析为整数,完全不会做值的相等判断。

这也是你遇到“小数正常、大数报错”的原因:当两个随机数之和刚好是10时,你传入的进制是日常用的十进制,输入合法十进制数时方法会返回true,看起来功能正常;一旦和值大于10(比如等于60),你相当于要求输入内容符合60进制的整数规则,普通十进制输入自然会判定失败。

另外你现在的写法还有个小瑕疵:每次调用randomNum()都会新建一个Random实例,短时间内多次调用会提升随机数重复的概率,建议把Random实例定义为静态常量复用。

修复后代码
import java.util.Random;
import java.util.Scanner;

public class AdditionQuiz {
    // 全局复用Random实例
    private static final Random randomGenerator = new Random();

    static int randomNum(){
        // 生成0-50区间的随机整数
        return randomGenerator.nextInt(51);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num1 = randomNum();
        int num2 = randomNum();
        int correctAnswer = num1 + num2;

        System.out.println("What is "+num1+"+"+num2+" equal to?");
        
        // 第一步:判断用户输入是否为合法整数
        if (sc.hasNextInt()) {
            int userAnswer = sc.nextInt();
            // 第二步:对比用户输入和正确答案
            if (userAnswer == correctAnswer) {
                System.out.println("Correct");
            } else {
                System.out.println("Wrong");
            }
        } else {
            System.out.println("Please enter a valid integer.");
        }
        
        sc.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:12:24