有时候我在敲代码的时候会发现,我在控制台输入多个字符串时候明明还没有输入完,代码已经开始执行了,我便开始展开了一些研究和理解。
众所周知,next()是遇到空格或者换行符时候停止读取,而nextline()是遇到换行符停止读取,即可以读取空格。
如图所示,我只输入了1+enter+aaa便停止输入开始执行代码并输出了,并且输出结果显示我的字符串a为空。
这种结果的原因是scan.nextInt()并不会读取换行符enter,即此时的读取位置还在1之后,之后执行nextline()读取指令,发现遇到了enter换行符,停止读取,因此字符串a读取了空。
想解决上述问题,很简单,只需要在读取完1之后,加入代码scan.nextLine();单独将换行符读取完之后即可。
具体解释:
上图可以充分显示第7行代码读取时的位置是在控制台输入的1之后,并且还读取了一个空格
那么为什么next()就不会发生上述情况呢?这是因为next()读取方式是从第一个可读字符开始读取的,意思就是,我们在用nextInt()读取完1之后,执行next()时候它会开始寻找字符,不管在这个寻找过程是否遇到了空格或者是换行符等等,它都不管,直到它遇到了下一行的“aaa”便开始读取。
谢谢大家的观看,希望能对大家有帮助呢。