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

Java整数输入验证异常:二次输入后始终输出首次输入值

解决你的整数输入验证与计算问题

我明白你遇到的困扰了——不管你怎么修正第二个整数的输入,程序最后总是用第一次输入的那个值来执行计算。这是因为你的代码里存在几个关键的逻辑错误,咱们一步步拆解并修复:

问题1:错误的输入类型判断方法

你在第二个输入循环里用了in.hasNextBigInteger()来判断输入是否为整数,但你的变量i2是int类型,应该用in.hasNextInt()才对。hasNextBigInteger()是用来检测超出int范围的大整数的,这会导致普通int输入被误判为无效,直接进入错误分支。

问题2:多余的break语句导致循环提前终止

在第二个循环的if(in.hasNextBigInteger())分支里,不管i2是否大于i1,最后都有一个break语句。这就意味着哪怕用户输入的第二个整数比第一个小,循环也会直接终止,把那个不符合要求的i2保留下来,根本不会让用户重新输入正确的值。

问题3:无效的输入清除操作

当i2小于i1时,你调用了in.next(),但这时候in.nextInt()已经把那个整数读取到i2里了,in.next()会去读取下一个输入内容,反而会打乱后续的输入流程,完全没必要这么做。


修复后的完整代码

import java.util.Scanner;

public class Comparing {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 输入第一个整数并验证
        int i1;
        while(true){
            System.out.print("Enter the first integer: ");
            if(in.hasNextInt()){
                i1 = in.nextInt();
                break;
            }else{
                System.out.println("Invalid Integer! Please enter a valid integer.");
                in.next(); // 清除非整数的输入内容
            }
        }

        // 输入第二个整数(必须大于第一个)并验证
        int i2;
        while(true){
            System.out.print("Enter a second larger integer: ");
            if(in.hasNextInt()){
                i2 = in.nextInt();
                if(i2 > i1){
                    break; // 符合条件,退出循环
                }else{
                    System.out.println("Invalid input! The second integer must be larger than the first.");
                    // 这里不需要in.next(),因为已经用nextInt()读取了输入
                }
            }else{
                System.out.println("Invalid Integer! Please enter a valid integer.");
                in.next(); // 清除非整数的输入内容
            }
        }

        // 计算i1和i2之间的奇数和
        int oddSum = 0;
        for(int num = i1; num <= i2; num++){
            if(num % 2 != 0){
                oddSum += num;
            }
        }
        System.out.println("The sum of odd integers between " + i1 + " and " + i2 + ": " + oddSum);
        in.close(); // 关闭Scanner资源,养成良好习惯
    }
}

关键修复点说明

  • 把第二个循环的hasNextBigInteger()替换为hasNextInt(),匹配int类型的输入判断逻辑。
  • 移除了第二个循环里多余的break语句,只有当i2确实大于i1时才退出循环,否则让用户重新输入。
  • 优化了错误提示信息,让用户更清晰地知道输入不符合要求的原因。
  • 去掉了i2小于i1时多余的in.next()调用,避免输入流程混乱。
  • 添加了in.close()来关闭Scanner资源,符合Java的资源管理规范。
  • 将变量名oddsum改为oddSum,遵循Java驼峰命名规范,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:55