You need to enable JavaScript to run this app. Java使用Scanner校验整数输入并求和时出现三次输入、逻辑错位异常
优惠活动
大模型
产品
解决方案
定价
更多

Java使用Scanner校验整数输入并求和时出现三次输入、逻辑错位异常

代码运行异常问题

实际表现

这段代码的预期逻辑是:接收a、b两个用户输入,校验两个输入都是整数后计算二者之和。但实际运行时:

  • 程序会要求用户连续输入3次内容
  • 输出结果完全错位:用前两次输入的数值计算了求和值,把后两次输入对应的有效性判定值打印了出来,和预期逻辑完全不符。

原始问题代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter first number");
        int a = sc.nextInt();
        boolean aValid = sc.hasNextInt();
        System.out.println(aValid);
        System.out.println("Enter Second number");
        int b = sc.nextInt();
        boolean bValid = sc.hasNextInt();
        System.out.println(bValid);
        if(aValid && bValid){
            System.out.println("Sum of number is "+(a+b));
        }
        else{
            System.out.println("Enter integer number");
        }
    }
}

问题根因

代码完全颠倒了Scanner两个核心方法的执行时序:

  • nextInt() 会直接从输入流读取下一个整数赋值给变量,如果当前输入不是整数会直接抛出运行时异常,根本没有预留校验的空间
  • hasNextInt() 的作用是判断输入流中尚未被读取的待处理内容是不是整数,它无法校验已经被nextInt()读走的内容

按照现有代码的执行流:

  1. 提示用户输入第一个数,nextInt()读走用户第一次输入的内容赋值给a,随后的hasNextInt()会阻塞等待用户的第二次输入,判断第二次输入的内容是不是整数,把结果存为aValid
  2. 提示用户输入第二个数,nextInt()读走用户第二次输入的内容赋值给b,随后的hasNextInt()会阻塞等待用户的第三次输入,判断第三次输入的内容是不是整数,把结果存为bValid

这就是为什么程序需要用户输入3次,最后输出逻辑完全错位的原因。

修正方案

正确的校验顺序必须调整为:先调用hasNextInt()判断当前待读取的输入是否为整数,确认合法后再调用nextInt()读取值赋值给变量。

修正后的可正常运行的代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 校验第一个输入
        System.out.println("Enter first number");
        boolean aValid = sc.hasNextInt();
        if (!aValid) {
            System.out.println("Enter integer number");
            return;
        }
        int a = sc.nextInt();

        // 校验第二个输入
        System.out.println("Enter Second number");
        boolean bValid = sc.hasNextInt();
        if (!bValid) {
            System.out.println("Enter integer number");
            return;
        }
        int b = sc.nextInt();

        // 两个输入均合法时计算并输出和
        System.out.println("Sum of number is " + (a + b));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 13:45:03