黑马程序员技术交流社区

标题: 关于Scanner类,先录入一个整数,再录入一个字符串的问题 [打印本页]

作者: 疯狂的麦克斯    时间: 2016-9-15 10:48
标题: 关于Scanner类,先录入一个整数,再录入一个字符串的问题
Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int a = sc.nextInt();
        System.out.println("请输入任意字符串:");
        String str = sc.nextLine();
        System.out.println(a+"----"+str);


为什么输出结果,,,,,,,
请输入一个整数:
10
请输入任意字符串:
10----

当我键盘敲入10后,就结束了,为什么。。。。。。。

作者: mawenliang    时间: 2016-9-15 11:00
这个地方,String str = sc.nextLine()  录入的是回车,你可以选择用sc.next()或者是重新创建对象再调用!
作者: Jerry007    时间: 2016-9-15 11:22
楼上说的很对,我运行了一下,没问题了.
[Java] 纯文本查看 复制代码
import java.util.Scanner;
class str {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int a = sc.nextInt();
        System.out.println("请输入任意字符串:");
        String str = sc.next();
        System.out.println(a+"----"+str);
               
        }
}




作者: zzdhm    时间: 2016-9-15 19:13
nextInt()是键盘录入整数的方法,当我们录入10的时候
                 * 其实在键盘上录入的是10和\r\n,nextInt()方法只获取10就结束了
                 * nextLine()是键盘录入字符串的方法,可以接收任意类型 ,通过\r\n,只要遇到\r\n就证明一行结束
       
作者: huangbinqqian    时间: 2016-9-15 19:15
因为这个时候,你的回车键,就是“\r\n”就是下一行的输入语句。就是str = “\r\n”
作者: 疯狂的麦克斯    时间: 2016-9-16 00:20
mawenliang 发表于 2016-9-15 11:00
这个地方,String str = sc.nextLine()  录入的是回车,你可以选择用sc.next()或者是重新创建对象再调用! ...

恩恩,长知识了
作者: 疯狂的麦克斯    时间: 2016-9-16 00:25
zzdhm 发表于 2016-9-15 19:13
nextInt()是键盘录入整数的方法,当我们录入10的时候
                 * 其实在键盘上录入的是10和\r\n,nextInt()方法只 ...

我输入的只是10,但随后我又敲回车了,当回车符\r\n被nextline()接收,就停止接收录入信息了,因此啥都没接收到就往下执行了,我觉得是这样,不知道对不对
作者: 疯狂的麦克斯    时间: 2016-9-16 00:27
huangbinqqian 发表于 2016-9-15 19:15
因为这个时候,你的回车键,就是“\r\n”就是下一行的输入语句。就是str = “\r\n” ...

我输入的只是10,但随后我又敲回车了,当回车符\r\n被nextline()接收,就停止接收录入信息了,因此啥都没接收到就往下执行了,我觉得是这样,不知道对不对,应该是啥都没接收吧,要不然不得能打印出\r\n,但实际上啥都没打印
作者: 许华洋    时间: 2016-9-16 00:56
涨姿势了!!!
作者: SunCowbee    时间: 2016-9-16 01:57
这也是学习了,不过实际开发肯定不会这么用吧,学习的时候能推敲推敲
作者: 459374998    时间: 2016-9-16 22:02
Scanner录入字符串的方法不是直接next()么,才学到面向对象,后面不太了解,现在就知道录入字符串用这个方法,nextline()方法还没用过
作者: huangbinqqian    时间: 2016-9-16 22:48
疯狂的麦克斯 发表于 2016-9-16 00:27
我输入的只是10,但随后我又敲回车了,当回车符\r\n被nextline()接收,就停止接收录入信息了,因此啥都没 ...

恩恩,也可以这么理解吧,老实说,那个nextint,其实以后基本不会用到,都是用nextline,这个方法,之所以这样是因为,到后面的输入都是要String类型
作者: 小坏孩    时间: 2016-9-16 23:21
nextline的问题,尽量用next,这样就不会出现你那样的情况的.  我前天也出现这种情况,老师跟我说尽量不要用nextline
作者: 郑大仙丶    时间: 2016-9-16 23:52
最好用next(),不要用nextLine(),如果非要在nextInt下面用nextLine,就需要在前面再创建一个新的Scanner..
作者: a869588615    时间: 2016-9-16 23:57
看到大神们的回复,增长了好多知识。
作者: 疯狂的麦克斯    时间: 2016-9-18 01:32
SunCowbee 发表于 2016-9-16 01:57
这也是学习了,不过实际开发肯定不会这么用吧,学习的时候能推敲推敲

。。。。是的是的
作者: 疯狂的麦克斯    时间: 2016-9-18 01:34
459374998 发表于 2016-9-16 22:02
Scanner录入字符串的方法不是直接next()么,才学到面向对象,后面不太了解,现在就知道录入字符串用这个方 ...

nextLine可以接收任意字符,包括空格,next()遇到空格就结束了

作者: 疯狂的麦克斯    时间: 2016-9-18 01:35
小坏孩 发表于 2016-9-16 23:21
nextline的问题,尽量用next,这样就不会出现你那样的情况的.  我前天也出现这种情况,老师跟我说尽量不要用ne ...

完美
作者: Array先生    时间: 2016-9-18 06:22
nextLine( )接收空格和换行,所以就退出了
作者: 宝瓶子    时间: 2016-9-18 08:46
因为enter回车键就是一个字符串,你用str接收了
作者: 9775菜鸟变大神    时间: 2016-9-18 09:04
此程序可以这样解决
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int a = sc.nextInt();sc.nextLine();
System.out.println("请输入任意字符串:");
String str = sc.nextLine();
System.out.println(a+"----"+str);

原因是你在录入nextLine()的时候接收的是回车接收以后程序结束 如果按照的我方法去做的话 就说明会有一个进行接收了 下面的就可以正常使用了或者以下代码也可实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int a = sc.nextInt();
System.out.println("请输入任意字符串:");
String str = sc.next();
System.out.println(a+"----"+str);
原理是 把Line去掉了 说明不需要接收空格 这样就不会出现刚才的问题了


作者: litianji2016    时间: 2016-9-18 19:16
nextLine()换成next()
作者: 737371444    时间: 2016-9-18 21:02
nextLine()方法识别的是\r和\n
还有next()方法  识别的是空格,有时间你要自己试一下里边的区别,都是常见的典型,以后面试可能会被问的
作者: 灵动    时间: 2016-9-18 21:17
必须的!
nextInt()和nextLine()方法冲突;
因为nextInt()是以回车键结束,回车键相当于\r\n;而这个方法只会读到整数,对于\r\n不会被读到,此时\r\n就会变为下一行,被nextLine()所读到,
而nextLine()方法遇到\r\n就会直接结束,所以输完整数之后,nextLine方法就业结束了
作者: qiuyou    时间: 2016-9-18 21:24
nextLine()方法遇到\r\n就结束了
作者: chennnnnn    时间: 2016-9-18 21:25
这个基础班好像听老师讲过了,被你这么一说,哎呀  我没听课啊
作者: 459374998    时间: 2016-9-18 21:46
疯狂的麦克斯 发表于 2016-9-18 01:34
nextLine可以接收任意字符,包括空格,next()遇到空格就结束了

这样哈,又涨姿势了。
作者: Fate_stay    时间: 2016-9-18 23:11
我也遇到过这个问题,是因为:nextLine()是键盘录入字符串的方法,可以接收任意类型 ,通过\r\n,只要遇到\r\n就证明一行结束
作者: 疯狂的麦克斯    时间: 2016-9-19 22:34
Fate_stay 发表于 2016-9-18 23:11
我也遇到过这个问题,是因为:nextLine()是键盘录入字符串的方法,可以接收任意类型 ,通过\r\n,只要遇到\r\n ...

...不错不错
作者: changfa    时间: 2016-9-19 22:39
只知道不可以这样用 有两种解决方法   第一  再创建一个Scanner 就行  第二忘记了  出现这个是因为在输出10之后又个\r\n 换行  所以就出现这种结果
作者: changfa    时间: 2016-9-19 22:40
只知道不可以这样用 有两种解决方法   第一  再创建一个Scanner 就行  第二忘记了  出现这个是因为在输出10之后又个\r\n 换行  所以就出现这种结果
作者: lixuelin    时间: 2016-9-19 22:42
next和nextLine各有特点next遇到空格就挂了 nextLine遇到回车结束,所以我们在进行调用的时候需要看是否有回车与空格符
作者: 疯狂的麦克斯    时间: 2016-9-19 22:52
lixuelin 发表于 2016-9-19 22:42
next和nextLine各有特点next遇到空格就挂了 nextLine遇到回车结束,所以我们在进行调用的时候需要看是否有回 ...

恩恩额

作者: 疯狂的麦克斯    时间: 2016-9-19 23:52
changfa 发表于 2016-9-19 22:40
只知道不可以这样用 有两种解决方法   第一  再创建一个Scanner 就行  第二忘记了  出现这个是因为在输出10 ...

恩恩
作者: 疯狂的麦克斯    时间: 2016-9-20 00:08
litianji2016 发表于 2016-9-18 19:16
nextLine()换成next()

恩恩额,学习了
作者: AC12345    时间: 2016-11-11 18:20
因为nextLine输入字符串时以\r\n为标记来录入一行,遇到\r\n就结束了,当你输入整数后回车,就相当于录入了\r\n但是nextInt只提取\r\n前的,所以\r\n被nextLine捕获,录入字符串就结束了
作者: poi1234bnm    时间: 2016-11-11 20:02
活到老学到老。。
作者: ylz1997    时间: 2016-11-11 22:42
虽然next不存在上面所说的问题  但是 next遇到空格就停止录入了  还是都用nextline比较好




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