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

Java Scanner控制台输入时插入点自动跳行问题排查

问题原因

光标跳到下一行不是输入组件的异常,是代码本身的逻辑导致:

  1. 输出Do you enjoy life询问时你用的是System.out.println()方法,这个方法会在输出完指定内容后自动追加一个换行符,输出结束后光标自然会移动到下一行,和Scanner输入逻辑无关。
  2. 代码里还存在一个隐藏的Scanner使用坑:调用nextInt()读取年龄时,只会读取输入的数字部分,你输入完数字按下的回车换行符会残留在输入缓冲区中,如果后续直接调用nextLine()读取文本,会直接读到这个残留的换行符,返回空字符串。你当前用next()读取回答时,next()会自动跳过前置的空白字符(换行、空格、制表符),所以暂时没有触发这个问题。
解决方法
  • 将输出询问语句的System.out.println()替换为System.out.print(),该方法输出内容后不会追加换行符,光标会停留在问句末尾等待输入。
  • 如果需要读取包含空格的完整回答(比如yes, I love it),将keyboardInput.next()替换为keyboardInput.nextLine(),同时在nextInt()调用后新增一行keyboardInput.nextLine(),用来消耗掉缓冲区里残留的换行符,避免读入空内容。
  • 用完Scanner实例后建议调用close()方法释放资源。
修正后可运行代码
import java.util.Scanner;

public class messing {

    public static void main(String[] args) {
        Scanner keyboardInput = new Scanner(System.in);
        System.out.print("Enter Your Name: ");
        String name = keyboardInput.nextLine();

        System.out.print("How old are you: ");
        int age = keyboardInput.nextInt();
        // 消耗nextInt遗留的换行符
        keyboardInput.nextLine();
        // 替换println为print,不自动换行
        System.out.print(name + " you are " + age + "?" + " Do you enjoy life: " );

        String enjoy = keyboardInput.nextLine();
        System.out.print(enjoy + "?");
        keyboardInput.close();
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:45:38