码迷,mamicode.com
首页 > 其他好文 > 详细

Scanner中的nextLine()不执行

时间:2020-01-15 17:59:15      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:int   div   load   and   font   scan   size   回车   字符   

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()在给我们输入机会之前就读取到了上次输入剩下的“换行”,判断输入完毕,继续执行下面其他内容。

解决办法

  1. 如果不是必要获取一整行,可以直接使用next()。

  2. 如果确实需要,可以执行两次nextLine(),让第一个把上次剩余的换行读取掉,第二个来执行需要的内容。(该方法应确保前面确实有nextLine以外的输入【目前只测试了常用的几个输入方式】,留有换行符,不然会出现连续输入两次的情况。)

  3. 也可以创建一个新的Scanner sc2 = new Scnaner(System.in);,这样nextLine()就又是第一个输入了。虽然个人认为不是一个好的办法。 

 

Scanner中的nextLine()不执行

标签:int   div   load   and   font   scan   size   回车   字符   

原文地址:https://www.cnblogs.com/CynthiaLin/p/Scanner_nextLine-invalid.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!