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

Java Scanner工作机制疑问:对一段输入统计代码的输入逻辑困惑

关于Java Scanner工作机制的疑问

我的代码与疑惑

public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        int count = 0;
        for (int i = 0; i < N; i++){
            if (in.nextInt() % 7 == 0){
                count++;
            }
        }
        System.out.printf("%d", count);
    }
}

我原本以为这段代码只会从键盘接收1个输入,但实际上它将第一个数字作为输入数量,之后还会接收N个数字。想请教Scanner的具体工作机制是怎样的?


解答

别担心,这个误解挺常见的,咱们一步步拆解Scanner的工作逻辑:

  1. Scanner是绑定输入流的"扫描器"
    当你写Scanner in = new Scanner(System.in);时,你创建了一个和**标准输入流(键盘输入)**绑定的Scanner实例。它不会只盯着"一次输入",而是把你从键盘输入的所有内容(不管你分几次敲回车、用空格分隔)当成一个连续的、由空白(空格、回车、制表符等)分隔的元素序列。

  2. nextInt()是"取走下一个整数"
    每次调用in.nextInt(),Scanner都会做这几件事:

    • 跳过输入流里所有的空白字符(不管是换行还是空格)
    • 找到第一个符合整数格式的字符序列,把它转换成int类型返回
    • 然后把指针移到这个整数的后面,等着下一次读取

    所以你的代码里:

    • 第一次nextInt()读取的是第一个整数,赋值给N,这时候输入流里剩下的内容还在,没被处理
    • 循环里的N次nextInt(),每次都会从输入流里取下一个整数,不管这个整数是和N在同一行,还是在后面的行里
  3. 举个实际输入的例子
    比如你在键盘输入:

    4
    7 14 21 22
    

    或者直接输入4 7 14 21 22然后回车,Scanner的处理逻辑是完全一样的:

    • 第一次nextInt()拿到4(赋值给N)
    • 循环4次,依次拿到7、14、21、22,统计其中能被7整除的数量(这里是3)

简单来说,Scanner不是按"行"或者"单次输入"来读取的,而是按分隔符(默认是空白)分割的元素来逐个读取,每次调用nextXxx()方法就取走下一个对应类型的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:06:11