昨天随便写了一个小程序,用到了nextLine(),在这里用nextLine()时遇到的一个小问题,总结一下
首先,我们要知道next和nextLine()的区别,不知道同学,请点击这里查看
接着,我们看一下这个小程序:
按照我的意愿,是想着先提示我输入姓名,再提示我输入性别,然后分别打印我的姓名+性别,但是在我输入姓名后,程序并没有出来让我输入性别的提示,而是直接执行了后面的语句,仿佛默认给我把性别输入了一般,这是怎么回事呢?
package tv.zhangjia.nextDemo; import java.util.Scanner; public class Test { public static void main(String[] args) { String str2 = "男"; Scanner input = new Scanner(System.in); System.out.print("请输入你的姓名:"); String str = input.next(); System.out.print("请输入你的性别:"); str2 = input.nextLine(); System.out.println(str + "的性别是" + str2); } } 输出: 请输入你的姓名: 输出:张甲 输出: 请输入你的性别:张甲的性别是//这里还没等我输入性别,直接执行下一句代码,打印输出了
我们可以看到,在刚开始的时候,我们给str2赋予了初值为“男”,但是当我们输入姓名后,却直接把剩下的语句都执行了,而且最后输出的性别为空,这说明,str2的值在程序的执行过程中,是被改变了的,其实原因很简单:
nextLine()会接收‘\n’换行符(虽然不会显示),和next()等一起使用的时候会接收到上一个输入的换行符。也就是说,当我们在输入姓名为“张甲”的时候,“张甲”被保存在str中,而我们输入张甲回车的换行符“\n”被保存在了str2中,所以当我们输入姓名后,一回车,就相当于改变了str2的值为“\n”,所以在最后打印的时候,输出我们的性别是空~
而且不止是next(),nextDouble() ,nextFloat(), nextInt()等与nextLine()连用时都存在这个问题,那么有什么解决方法呢?其实也很简单,只需要在next()后面,加上nextLine()语句,,将“\n”过滤掉即可。 代码实现如下:
package tv.zhangjia.students; import java.util.Scanner; public class Test { public static void main(String[] args) { String str2 = "男"; Scanner input = new Scanner(System.in); System.out.print("请输入你的姓名:"); String str = input.next(); input.nextLine(); System.out.print("请输入你的性别:"); str2 = input.nextLine(); System.out.println(str + "的性别是" + str2); } } 输出: 请输入你的姓名: 输入:张甲 输出:请输入你的性别: 输入:男 输出: 张甲的性别是男
我们可以看到,程序已经正常运行,打印出了我的性别~
参考资料:
请登录之后再进行评论