前言

Scanner 是 Java 初学最常用的控制台输入工具,但新手极易遇到:

  • 连续输入跳过、读取空值
  • 关闭后再次使用报错
  • 空指针异常

本篇一次性解决 Scanner 所有新手 bug。

一、Scanner 基础用法

java

运行

Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.close();

二、新手 Top1 bug:nextInt 后 nextLine 空值跳过

报错现象

输入数字后,直接跳过字符串输入

原因

nextInt() 只读取数字,不读取回车换行符 换行符残留在缓冲区,被下一次 nextLine() 直接读取为空

完美解决方案

读取数字后,清空缓冲区

java

运行

sc.nextLine(); // 吸收残留换行符

三、重复关闭 Scanner 导致的报错

报错场景

多个方法多次 new Scanner、多次 close

原因

System.in 全局唯一流,关闭后无法再次使用

规范写法

  1. 全局只创建一个 Scanner 对象
  2. 程序最后只关闭一次

四、输入不匹配异常

输入字母却用 nextInt → 输入类型不匹配异常 解决:输入前提示规范输入,或后续学习异常捕获

五、新手最佳模板(可直接复用)

java

运行

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入数字:");
        int a = sc.nextInt();
        sc.nextLine(); // 吸收换行
        
        System.out.print("请输入字符串:");
        String str = sc.nextLine();
        
        System.out.println(a + " " + str);
        sc.close();
    }
}

结语

Scanner 90% 的报错都是缓冲区换行符问题,掌握吸收换行符技巧,彻底解决输入错乱问题。

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐