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

使用input.nextInt()后Scanner读取字符串跳过索引0的问题排查

为什么使用input.nextInt()会跳过第一个nextLine()输入?

咱们来拆解一下这个问题的本质,核心在于Scanner类里nextInt()和nextLine()的读取逻辑差异:

问题根源

当你在代码1里执行int num = input.nextInt();时:

  • 你输入3然后按下回车,此时输入流里的内容是3\n(\n是换行符)
  • nextInt()只会读取输入中的整数部分,也就是3,但它不会处理末尾的换行符\n,这个换行符会留在输入流里
  • 接下来调用arrStrMaker(),第一个input.nextLine()会直接读取输入流里剩下的\n,相当于读取了一个空字符串,所以看起来直接跳过了索引0的输入,直接进入索引1的输入提示

而代码2里直接赋值num=3,没有从输入流读取任何内容,输入流是空的,所以第一个nextLine()会正常等待你输入内容。

解决办法

有两种常见的方式可以解决这个问题:

方法1:在nextInt()后手动消耗换行符

在读取完整数后,额外调用一次input.nextLine()来吃掉残留的换行符:

import java.util.Scanner;
public class test {
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        int num = input.nextInt();
        input.nextLine(); // 处理掉nextInt()留下的换行符
        String[] strArr = new String[num];
        arrStrMaker(strArr);
    }
    public static void arrStrMaker(String[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println("String for index ["+i+"]");
            arr[i] = input.nextLine();
            System.out.println(arr[i]);
        }
    }
}

方法2:全程用nextLine()读取再转整数

避免混合使用nextInt()和nextLine(),先读取整行内容再转成整数:

import java.util.Scanner;
public class test {
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.print("请输入数字:");
        String numStr = input.nextLine();
        int num = Integer.parseInt(numStr); // 将字符串转成整数
        String[] strArr = new String[num];
        arrStrMaker(strArr);
    }
    public static void arrStrMaker(String[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println("String for index ["+i+"]");
            arr[i] = input.nextLine();
            System.out.println(arr[i]);
        }
    }
}

这样两种方式都能让输入流程恢复正常,不会出现跳过输入的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:01:59