Java Scanner控制台输入时插入点自动跳行问题排查
问题原因
光标跳到下一行不是输入组件的异常,是代码本身的逻辑导致:
- 输出
Do you enjoy life询问时你用的是System.out.println()方法,这个方法会在输出完指定内容后自动追加一个换行符,输出结束后光标自然会移动到下一行,和Scanner输入逻辑无关。 - 代码里还存在一个隐藏的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
相关产品推荐
相关产品推荐

