黑马程序员技术交流社区

标题: 为什么nextInt()下不能有nextLine()? [打印本页]

作者: XER    时间: 2016-3-18 23:22
标题: 为什么nextInt()下不能有nextLine()?
今天老师讲了有点没听明白,求同学们指点迷津
作者: lgdbest    时间: 2016-3-18 23:34
nextInt()  是int类型的,nextLine()是字符串类型的,int 里怎么能有字符串呢?  是问的这个意思吗?或者你重新表达一下
作者: toxic罐头儿    时间: 2016-3-18 23:53
多多学习 多多加油@@
作者: zhangchao5292    时间: 2016-3-19 00:02
next()是遇见第一个有效字符(非空格、换行字符)时,开始执行扫描,遇到第一个分隔符或结束符(空格或换行符)时,结束扫描。 nextLine()是接收输入的所有的字符串,一直到你敲回车为止
作者: debuggerx01    时间: 2016-3-19 04:53
    你去下载一下第12天的课程视频,12-2解释的就是你这个问题。
    具体状况是,如果对一个Scanner(System.in)的对象紧接着调用sc.nextInt();sc.nextLine(); 会导致第二个读取字符串的操作“直接跳过用户键盘录入,并得到一个空字符串”,原因是:
   
nextInt() 接收一个整型字符,nextline()读入一行文本,会读入"\n"字符,但"\n"并不会成为返回的字符
串值的一部分

加入如下代码
int n = ScannerObjext.nextInt()
String s1 = ScannerObjext.nextLine();
String s2 = ScannerObjext.nextLine();
假设输入:
42
and don't you
forget it
在这种情况下,n的值为42,s1设置为空白字符,s2设置为and don't you
因为nextInt()读入42,但并没有读入"\n",因此S1调用42所在行的剩余部分
也就是说,你输入的是123回车,实际上是123\r\n,而nextInt读到了123之后,\r\n的信息还在输入流里(也就是System.in),运行到下一行的时候,刚好被nextline接收到,nextline就“以为是用户没有输入字符直接按下了回车”,结果就是上面的情况了
作者: 就是我    时间: 2016-3-19 09:12
你可以试一下嘛,先用nextInt()接收输入,再用nextLine()接收输入;你会发现系统只要你输入一次,就结束了两次键盘内容读取的操作
就是说 本来应该等待输入两次的,你输入一次程序就结束了
因为你在输入 第一次时,输入具体内容或被nextInt接收,但是你按下的enter键内容实际上没有被nextInt拿走,
这个内容 恰好是nextLine()认为输入结束的内容,所以系统会认为你完成了两次输入,第一次是你输入的具体内容
第二次默认为空了
你可以在实验的程序中,将上面录入的内容打印,会发现nextLine()接收的内容为空了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2