今天,在整理笔记的时候发现一个奇怪的现象:
第一种情况:
会发现输出结果跟我们想象的有很大的差别,就是控制台还没输入姓名,就已经输出显示了。
原因如下:
Scanner是一个扫描器,我们录取到键盘的数据,先存到缓存区等待读取,它判断读取结束的标示是 空白符;比如空格,回车,tab 等等。
next()方法读取到空白符就结束;
nextLine()读取到回车结束也就是“\r”;
所以没还顺序前测试的时候next()再检测的空格的时候就结束输出了。
修改顺序后遇到的问题就是因为next()读取到空白符前的数据时结束了,然后把回车“\r”留给了nextLine();所以上面nextLine()没有输出,不输出不代表没数据,是接到了空(回车“/r”)的数据。
第二种情况:
第三种情况:
第四种情况:
第四种情况:如果需要从键盘接收多个字符串,可以把nextLine()放到nextInt()前面,如果实在不行,则在nextInt()后边添加nextLine()方法吸收掉多余的字符串
综上:二三四种情况都正确,编写程序的时候注意使用顺序就不会出错。