首先介绍一个经典的问题:nextline和nextInt混用出现的问题,当前面有nextInt时,nextLine不会等待你输入字符串。如下:
如图,控制台还没有等我输入字符串就直接输出了num
因为你输入10的时候实际是按了回车,因此输入的实际上是10加上回车换行符,10被nextInt读取了,但是回车换行符被保留下来了。而nextLine的结束符就是回车换行符(本来正常操作应该是输入字符串的时候敲下字符串然后敲换行,nextLine看见换行符就截止工作了,输出了换行符前面的字符串),此时nextLine看到内存之中有一个换行符就结束工作了,因此不会进行接下来的任何操作。
nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。 所以,第二种情况键盘实际输入是“10+回车”,nextInt读出了“10”,并留下了“回车”, 接着netxLine读到了一个“回车”,这是字符串的结束判定符,因此直接结束。
nextInt和nextLine混用(整数和字符串混合输入的解决方法):用next和nextInt
那为啥替换成next就不会报错呢?因为next的结束符是空格和tab键,如下。前面输入整数的时候即使还留了换行符,但是next看到不会结束工作,因此可以发挥作用。
那又会有疑问,那next记录不完整啊,不可以记录含空格的完整数据 ,那咋办呢。网课老师说不需要解决,因为以后采集数据不会通过控制台键盘录入采集,而是通过网页。其实我也不是完全相信,鉴于目前还是小白,就不过分深究了。我稍微试了下。
而且不仅是不完整,当next输入有空格的时候还有出现一些问题。
1.当我输入的字符串有空格,此时报错,此时我debug发现大概就是nextInt接收到了j这个字符,因为前面next遇到它的结束符空格就录入结束了,剩下的j被nextInt遇到,因为不符合录入类型,故报错。那我把j替换成2还报错吗?试一下
2. 此时它不会等待我输入整数就直接结束了,但是!nextInt录入了2。因为换行符是nextInt的一个分隔符,他只会读取分隔符前面的有效字符。读取完成之后就结束了。所有有了上面的结果。
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
.nextInt():
这个方法跟next()一直,只是规定了数据类型是Int。.nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
————————————————
版权声明:本文为CSDN博主「万小猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40262372/article/details/119707423
因为此阶段是快速学习阶段,等掌握了基础之后,有时间再深究再补充,琢磨一下API啥的。