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)
上一篇 2022年6月10日 下午4:00
下一篇 2022年6月10日 下午4:16


相关推荐

  • UltraEdit 注册机使用说明

    UltraEdit 注册机使用说明请断开网络连接 或直接拔掉网线 后执行 安装完成后 点击弹出界面的 注册 按钮 然后直接点击 激活 此时 UltraEdit 检测到网络断开则弹出界面提示 脱机激活 此时启动注册机 并将 UltraEdit 激活码页面的 用户码 1 和 用户码 2 里的数字代码复制到注册机对应框中 然后点击 Generate 按钮 在注册机中产生的 Authorizatio 和 Authorizatio

    2025年9月27日
    5
  • ram和rom的区别_RAM和ROM各有什么特点

    ram和rom的区别_RAM和ROM各有什么特点RAM和ROM总结一、在解释之前先备注一些缩写的全称便于记忆:1、EPROM:(ElectricallyProgrammableRead-Only-Memory)电可编程序只读存储器2、EE

    2022年8月1日
    8
  • 网页播放rtsp视频流

    网页播放rtsp视频流网页播放rtsp视频流原文:https://blog.csdn.net/u011562107/article/details/78548605?locationNum=10&amp;fps=1RTSP协议(1)是流媒体协议。(2)RTSP协议是共有协议,并有专门机构做维护。(3)RTSP协议一般传输的是ts、mp4格式的流。(4)RTSP传输一般需要2-3个通…

    2022年10月18日
    5
  • BS和CS对比_CS与BS对接

    BS和CS对比_CS与BS对接BS和CS对比牛腩新闻发布系统已经开始了不短的时间了,CS的项目也算是接触了下,接下来对比下CS和BS       CS和BS是什么?       C/S结构即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销(客户端和服务器端的通信),可以充分利用两端硬件环境的优势。B/S结

    2022年10月16日
    4
  • java标识符可以$开头吗_JAVA标识符

    java标识符可以$开头吗_JAVA标识符JAVA标识符JAVA标识符简介Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符。也就是程序员在定义java程序时,自定义的一些名字,例如helloworld程序里关键字class后跟的Demo,就是我们定义的类名。类名就属于标识符的一种。标识符除了应用在类名上,还可以用在变量、函数名、包名上。(要求同学们先记住,以后会详细见到这些)。标识符命名规则1.标识符由…

    2022年7月26日
    18
  • AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁

    AppSync for iOS7安装教程、Cydia软件源安装AppSync补丁么是ipa补丁ipa补丁在Cydia里的名称是ApPSync for iOS(版本号),是在越狱之后,通过同步itunes安装破解过的后缀名格式为.ipa软件,所用到的补丁。AppSyncforiOS7怎么安装?以下为安装步骤:将设备至于wifi环境下,打开越狱后新增的Cydia底部状态栏点击 管理,选择软件源点击右上角 编辑 然后点击左上角的 添加

    2022年6月12日
    130

发表回复

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

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