Java的Scanner输入时,next()和nextLine()的区别[通俗易懂]

Java的Scanner输入时,next()和nextLine()的区别[通俗易懂]nextLine()不要和其他next方法一起用!!!尤其nextLine()不要放在它们后面!!!这个问题已经坑了我好多次了,但是每次都没有在意,主要是没反应过来出现问题的原因。今天阿里内推测验,又被nextLine()狠狠坑了一下。逻辑思路都是对的,就输入的数据不对。因为限时半小时,所以时间比较紧张,最后还是没弄出来。后来百度查了两者区别,果然问题是出在这里,改完之后问题就解决了。可怜我的…

大家好,又见面了,我是你们的朋友全栈君。

nextLine()不要和其他next方法一起用!!!尤其nextLine()不要放在它们后面!!!

这个问题已经坑了我好多次了,但是每次都没有在意,主要是没反应过来出现问题的原因。今天阿里内推测验,又被nextLine()狠狠坑了一下。逻辑思路都是对的,就输入的数据不对。因为限时半小时,所以时间比较紧张,最后还是没弄出来。后来百度查了两者区别,果然问题是出在这里,改完之后问题就解决了。可怜我的阿里内推测评。

首先是大家共所周知的区别

nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。

接下来是重头戏

next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

nextLine()方法的结束符只是Enter键

所以

nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

经过验证,其他的next的方法,如nextDouble()  ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。

具体点就是

nextLine()不能用在nextInt()的后面!!!!

解决方法有两种

第一种

在每一个 next()、nextDouble()  、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。

第二种

把nextLine()改为next()

例如如下代码

//part1
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        sc.nextLine();//这里不加nextLine()就会出问题
        int x[]=new int[n];
        int y[]=new int[n];
        for(int i=0;i<n;i++){
            String b = sc.nextLine();
            String c[]=b.split(",");
            x[i]=Integer.parseInt(c[0]);
            y[i]=Integer.parseInt(c[1]);

        }
//part2
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt(); 
        int x[]=new int[n];
        int y[]=new int[n];
        for(int i=0;i<n;i++){
            String b = sc.next();//这里用next()就可以了
            String c[]=b.split(",");
            x[i]=Integer.parseInt(c[0]);
            y[i]=Integer.parseInt(c[1]);

        }

总之,nextLine()不要和其他next方法一起用!!!尤其nextLine()不要放在他们后面!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132586.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解

    Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解Flowable快速入门教程:Flowable入门开发案例,结合流程设计器详细讲解前言流程设计器集成整体流程图项目结构流程部署启动流程流程节点说明第一审核人节点:实际设置审核人配置信息说明第二审核人:参数设置审核人配置信息说明第三审核人:参数分支判断与实际组配置配置信息说明h前言本文以一个简答的Demo为案例,按节点讲解,目的是为了让刚接触流程引擎的人能更快的熟悉流程引擎开发,了解业务…

    2022年5月21日
    40
  • spring项目无法引入@Resource注解问题[通俗易懂]

    spring项目无法引入@Resource注解问题[通俗易懂]问题:在spring项目中引入@Resource注解的时候,有红色下划线错误,而且输入注解的时候不能出现自动代码补全。解决办法:Spring项目中缺少javax.annotation包的依赖。在maven配置文件pom.xml中加入依赖。<!– https://mvnrepository.com/artifact/javax.annotation/javax.annotation…

    2022年6月13日
    143
  • 单片机控制步进电机-电路连接

    单片机控制步进电机-电路连接单片机控制步进电机-线路连接说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机控制步进电机的功能。后续会分别讲解单片机程序,S曲线生成方法,上位机等相关内容。硬件清单:1、单片机最小系统(本案例使用Atmega16芯片)2、步进电机(二相四线)3、稳压电源(24V)4、步进电机驱动器(TB6600)整体连接图:原理图:控制原…

    2022年5月31日
    31
  • Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code

    Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code这几天测试刚完成的网页授权获取微信用户信息功能。在第一步:用户同意授权获取code,通过code获取access_token时,有时会出现40029错误。经过调试,发现问题出现在redirect_uri=REDIRECT_URI当跳转到授权链接后,微信会发出两次转向至redirect_uri的相同请求(两次带进来的code是相同的)。第一次的code后已经成功换取得openid以及access_t…

    2022年5月1日
    65
  • 什么是大数据开发?「建议收藏」

    什么是大数据开发?「建议收藏」♥️大数据开发是干什么的?大数据作为时下火热的IT行业的词汇,随之而来的数据开发、数据仓库、数据安全、数据分析、数据挖掘等等围绕大数据的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。随着大数据时代的来临,大数据开发也应运而生。大数据开发其实分两种,第一类是编写一些Hadoop、Spark的应用程序,第二类是对大数据处理系统本身进行开发。第一类工作感觉更适用于dataanalyst这种…

    2022年5月4日
    126
  • Vue生成二维码_生成二维码插件

    Vue生成二维码_生成二维码插件首先安装一下面这个插件cnpminstallvue-qr-S接下来在需要生产并下载二维码的页面引入importVueQrfrom’vue-qr’并在components中注册为组件components:{VueQr//二维码组件},data(){ return{ config:{//二维码配置logo:”,value:”} }

    2022年9月25日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号