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
相关产品推荐
相关产品推荐

