前提概述:作为一个正在JavaSE的小白来说,Scanner类中nextLine(),nextInt()方法大家肯定都不陌生,然后本小白某天写代码的时候就遇到了这样的问题。
package test; import java.util.Scanner; public class testDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年龄:"); int age = sc.nextInt(); System.out.println("请输入性别:"); String sex = sc.nextLine(); System.out.println("年龄:" + age); System.out.println("性别:" + sex); } }
然后输出变成了这样:
请输入年龄:
19
请输入性别:
年龄:19
性别:
Process finished with exit code 0
于是,我将nextInt()方法注释掉,重新测试,这时毫无疑问是可以使用nextLine()方法的;显然是nextInt()方法导致了nextLine()的方法使用无效。然后,我就去了解了它们两个方法的原理。
导致nextLine()无效的原因:
首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,比如:空格,回车,Tab键等。
nextInt()读取到第一个结束符作为结束标记停止扫描,但是不会取走结束符,而是把它们留在了缓冲区。然后nextLine()方法再去缓冲区找数据的时候首先看到了结束符,然后就把这个结束符扫描接收进来,并在缓冲区内清除掉,于是就导致了自己想要输入的数据无法被正确接收。
解决方案:
根据如上无效原因,可得出如下解决方案,即在接收数据之前先提前使用一个nextLine()方法接收掉那个“碍事”的结束符,这样它就不能捣蛋啦。
package test; import java.util.Scanner; public class testDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年龄:"); int age = sc.nextInt(); sc.nextLine(); System.out.println("请输入性别:"); String sex = sc.nextLine(); System.out.println("年龄:" + age); System.out.println("性别:" + sex); } }
Congratulations! You pass!
请输入年龄:
19
请输入性别:
女
年龄:19
性别:女Process finished with exit code 0
关于 Scanner类nextInt()使用后导致nextLine()使用无效的内容就分享到这了,我也看了其它博客,别的大佬们还有很多的解决方案,不如到处学习学习吧。希望我的方法对你有所帮助,也希望我们在Java的学习路上能坚持到底~