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

Java新手求助:Scanner与for循环配合出现异常行为

Scanner循环输入异常问题分析与解决

问题原因

核心是Scanner不同输入方法混用导致的换行符残留:

  • 如果你代码里用了nextInt()、next()这类方法,它们只会读取输入的有效内容(比如数字、非空格字符串),不会读取输入末尾的换行符\n。
  • 后续调用nextLine()时,它会直接读取这个残留的换行符,返回空字符串,看起来像是“自动填入”。
  • 保留打印语句时,控制台的输出刷新和操作延迟让你没察觉到这个问题,但换行符残留的本质一直存在。

解决方法

方法一:统一用nextLine()读取所有输入

所有输入都用nextLine()获取,需要转换类型时手动处理(比如转成int、double),避免混用输入方法。示例代码:

import java.util.ArrayList;
import java.util.Scanner;

public class InputTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> inputList = new ArrayList<>();

        for (int i = 0; i < 3; i++) {
            System.out.print("请输入第" + (i+1) + "项内容:");
            String input = scanner.nextLine();
            inputList.add(input);
        }

        scanner.close();
        System.out.println("输入的内容:" + inputList);
    }
}

方法二:消费残留的换行符

如果必须混用nextInt()/next()和nextLine(),在调用nextLine()之前,先调用一次scanner.nextLine()吃掉残留的换行符。示例代码:

import java.util.ArrayList;
import java.util.Scanner;

public class InputTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> inputList = new ArrayList<>();

        // 假设先读取了一个整数
        System.out.print("请输入一个数字:");
        int num = scanner.nextInt();
        scanner.nextLine(); // 消费掉整数输入后的换行符

        for (int i = 0; i < 3; i++) {
            System.out.print("请输入第" + (i+1) + "项内容:");
            String input = scanner.nextLine();
            inputList.add(input);
        }

        scanner.close();
        System.out.println("输入的内容:" + inputList);
    }
}

方法三:跳过换行符

用scanner.skip(System.lineSeparator())替代额外的nextLine(),同样可以跳过残留的换行符,效果和方法二一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:52:07