Scanner中的nextLine()不执行
2020-01-15 16:02:21来源:博客园 阅读 ()
Scanner中的nextLine()不执行
状况
当需要多次输入时,代码中的nextLine()直接没有执行就运行下面内容了。
1 Scanner sc = new Scanner(System.in); 2 ? 3 System.out.println("请选择对方的角色:1.诸葛亮 2.孙瑜 3.赵云"); 4 int computerChoice = sc.nextInt(); 5 System.out.println("computerChoice:" + computerChoice ); 6 7 System.out.println("请输入你的名称:"); 8 String playerName = sc.nextLine(); 9 System.out.println("playerName:" + playerName );
第一个输入nextInt()是正常的,但是第二个输入nextLine()直接没让我输入,就开始进行输出,并且没有内容。
原因
不论是next()还是nextInt()或是其他一些输入,都是以分隔符结束,例如空格、换行。这也导致没有办法获取有空格的一行内容,才会使用到nextLine()方法。
delimiter分隔符
nextLine()方法是以换行符(回车)进行分割,可以获取一行内包括空白字符的所有内容。
相比之下,next()他们只获取了其中需要的内容部分,例如:输入“诸葛亮”之后进行回车换行,next()就能获取到取其中的字符“诸葛亮”,但是用于结束输入的“换行”,则因没有被读取而留下来,被后一个输入nextLine()读取到。nextLine()在给我们输入机会之前就读取到了上次输入剩下的“换行”,判断输入完毕,继续执行下面其他内容。
解决办法
-
如果不是必要获取一整行,可以直接使用next()。
-
如果确实需要,可以执行两次nextLine(),让第一个把上次剩余的换行读取掉,第二个来执行需要的内容。(该方法应确保前面确实有nextLine以外的输入【目前只测试了常用的几个输入方式】,留有换行符,不然会出现连续输入两次的情况。)
-
也可以创建一个新的Scanner sc2 = new Scnaner(System.in);,这样nextLine()就又是第一个输入了。虽然个人认为不是一个好的办法。
原文链接:https://www.cnblogs.com/CynthiaLin/p/Scanner_nextLine-invalid.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- 构造函数中的this()和super() 2020-06-10
- 怎么用Java 高效提取、替换、删除PDF文档中的图片 2020-06-09
- Spring12_Spring中的事务控制 2020-06-07
- 深入理解:设计模式中的七大设计原则 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash