黑马程序员技术交流社区

标题: 求大神指导一个关于键盘录入 hasNextInt方法的问题 [打印本页]

作者: 青菜市场    时间: 2015-12-18 22:46
标题: 求大神指导一个关于键盘录入 hasNextInt方法的问题
Main(主方法){
创建键盘录入对象;
Int x=0;
whlie (sc.hasNextInt()){
     i = sc.nextInt();
     System.out.print(i+"  ");
}}
发现输入多个整数用空格隔开Enter后可以输出所有整数,但是键盘录入不会结束,问题怎样让代码输入一行就结束键盘录入?我也试到一个可以在while方法后面加String str = sc.nextLine();在最后输入非数字符就结束的方法,可这不是我要的。
作者: 小鹿    时间: 2015-12-18 23:33
nextLine()   :遇到回车换行就结束了!
作者: kjkjkjh    时间: 2015-12-18 23:44
试到一个可以在while方法后面加String
作者: 青菜市场    时间: 2015-12-19 08:25
小鹿 发表于 2015-12-18 23:33
nextLine()   :遇到回车换行就结束了!

怎么加?
作者: 青菜市场    时间: 2015-12-19 08:28
kjkjkjh 发表于 2015-12-18 23:44
试到一个可以在while方法后面加String

我问题中就提到了 可是要以字母才能结束,这不是我想要的。我想利用Scanner以空格作为分割符的特点来一次接收多个整数,不想自己用空格自己切
作者: 我有一个邮箱了    时间: 2015-12-19 08:50
增加一个判断
作者: hdhunter    时间: 2015-12-19 10:52
Scanner使用内置的正则来匹配数据类型。也就是说它内置的,不一定是我们需要的。
就比如这个hasNextInt(),它吃下去的字符,就不会全部是数组。它是经过内置的正则匹配后,再把非ascii改成ascii。然后通过Integer.paseInt()。来转化成数字。

你的空格,和换行符,就这么无情地被吃了。

解决方法:
1.使用hasNextLine()进行外层判断。
2.由于你还是想一次输入完毕。那么hasNextInt()保持不变。


我没有试验,祝你成功。回头给我说一声。
作者: hdhunter    时间: 2015-12-19 11:00
我想了一下,这样可能不行。

把hasNextLine放在hasNextInt里面。其他不变,应该就行了。
作者: 王晓亮    时间: 2015-12-19 11:52

作者: 迷茫不堪的年纪    时间: 2015-12-19 19:08
尝试用break  , equals !
作者: 青菜市场    时间: 2015-12-19 22:48
hdhunter 发表于 2015-12-19 11:00
我想了一下,这样可能不行。

把hasNextLine放在hasNextInt里面。其他不变,应该就行了。 ...

外层加hasNextLine判断无效,放在hasNextInt里面是指重写hasNextInt方法还是在while 循环里面?如果是里面是无效的




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