Java中Scanner获取输入需重复输入的问题排查
问题解答:为什么需要重复输入两次名字?
嘿,你猜的完全没错!问题确实出在sc.next()这个方法上,我来给你拆解清楚:
原因分析
Scanner类的next()方法的核心逻辑是:每次调用都会从输入流里读取下一个以空格(或换行符)分隔的单词。你的代码里做了两次调用:
- 第一次调用
firstName = sc.next();:这时候程序会读取你输入的第一个单词,把它存在firstName变量里 - 第二次调用
System.out.println("Hello, " + sc.next() + "!");:这时候程序发现输入流里已经没有未读取的内容了,就会停下来等你再输入一个单词,所以才会出现需要重复输入两次的情况
修正方案
有两种简单的解决方式,你可以根据需求选:
方案1:复用已经读取的变量
既然已经把名字存在firstName里了,直接用这个变量输出就行:
public static void main(String[] args) { // 创建可用的输入设备实例 Scanner sc = new Scanner(System.in); // 提示用户输入 System.out.println("Please enter your first name:"); // 捕获首个单词并赋值给变量 String firstName = sc.next(); // 构建问候语(直接用已保存的变量) System.out.println("Hello, " + firstName + "!"); }
方案2:只读取一次(如果不需要保存变量)
如果不需要把名字存在变量里,直接读取一次就输出:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Please enter your first name:"); // 只调用一次next(),直接用在输出里 System.out.println("Hello, " + sc.next() + "!"); }
这样修改后,你只需要输入一次名字,程序就会正常输出问候语啦~
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

