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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python产生随机数-详解用python生成随机数的几种方法[通俗易懂]

    python产生随机数-详解用python生成随机数的几种方法[通俗易懂]今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1从给定参数的正态分布中生成随机数当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,就可以调用pytho…

    2022年10月4日
    0
  • phpstorm 激活码2021(破解版激活)

    phpstorm 激活码2021(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    215
  • csgo88skins_csgo开箱网站yesskins

    csgo88skins_csgo开箱网站yesskins88skins国内CSGO开箱网站已合并至88steam官方链接:88skins.com取回状态:饰品需要兑换取回优惠码:csgo(注册使用GOGO推广码免费获得3-20元随机奖励)

    2022年10月5日
    0
  • 【c语言】malloc函数详解[通俗易懂]

    【c语言】malloc函数详解[通俗易懂]谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。关于malloc相关的几个函数关于malloc我们进入Linuxman一下就会得到如下结果:也可以这样认为(window下)原型:externvoid*malloc(unsignedintnum_bytes);头文件:#include&amp;lt;malloc.h…

    2022年6月14日
    67
  • C++线程同步 CCRITICALSECTION(临界区类)附自己写的测试代码

    C++线程同步 CCRITICALSECTION(临界区类)附自己写的测试代码当多个线程访问一个独占性共享资源时,可以使用“临界区”对象。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止,这样就保证了不会在同一时刻出现多个线程访问共享资源。CCriticalSection类的用法如下:定义CCriticalSection类的一个全局对象(以使各个线

    2022年7月20日
    16
  • 对AutoResetEvent和ManualResetEvent的理解

    对AutoResetEvent和ManualResetEvent的理解一、作用AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne、Set和Reset。这三个方法的官方定义并不好理解,什么终止、非终止,乱七八糟的。在这里,我们以一种通俗易懂的概念来说明。 二、比喻如果把每个线程比作一辆汽车的话,AutoResetEvent和ManualResetEvent就

    2022年7月18日
    13

发表回复

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

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