一次惨痛的经历,昨晚的腾讯笔试里对输入的处理没处理好,导致在一道题上死磕太久,看来是与腾讯无缘了,吃一堑,长一智吧。

Scanner类的基本操作

//创建一个Scanner类的实例
Scanner in = new Scanner(System.in);
//获取输入的整数
int number = in.nextInt();//在Scanner类里通过nextXXX 来获取对应的数据类型
//获取输入的双精度浮点数
double figure = in.nextDouble();
//获取输入的单精度浮点数
float temp = in.nextFloat();
//获取输入的长整型
long pt = in.nextLong();//而Scanner类里的hasNextXXX返回的类型都是boolean类型的 判断是否有XXX类型的数据
string str = in.next();
boolean flags = in.hasnext();
//关闭输入流 良好的习惯 避免资源占用
in.close();

  在这里稍微解释一下,Scanner是一个扫描器,我们录取到键盘的数据,先存储到缓存区等待读取,它判断读取结束的标识是空白符,比如说空格、回车(\r)、制表符(tab)。
  我们可以写一个小程序做个试验,程序代码如下:

public static void main(String[] args) {//创建Scanner实例Scanner sc = new Scanner(System.in);while(sc.hasNext()){System.out.println("请输入你要输入的值:");String str = sc.next();System.out.println(str);}}

  程序运行的结果如下:

  可以看出程序在最开始的时候是让我们先输入数据的,也就是说执行到sc.hasNext()这里的时候我们就要输入数据,而Scanner扫描器正是如此读取数据的,首先让你输入数据,它就把输入的数据保存到缓冲区里,hasNext是判断缓冲区是否还有输入的数据,而输入的数据是存储到缓冲区里,然后再从缓冲区里取出来,如果上面的程序变成这样:

public static void main(String[] args) {//创建Scanner实例Scanner sc = new Scanner(System.in);while(sc.hasNext()){System.out.println("请输入你要输入的值:");}}

  那么程序运行之后的结果就是一直输出我们的“请输入你要输入的值:”,为什么会这样呢?因为hasNext方法在最开始的时候就要扫描缓冲区,如果缓冲区有我们期待的输入的数据的话就返回true,如果没有,不会返回false而是阻塞方法,等待你输入内容之后再继续扫描。而在上面的程序里,由于我们开始输入了数据,但是这个数据放在缓冲区里没有被拿出来,导致每一次扫描的时候,hasNext的返回值都是true,这就造成了无限循环。但是我们的第一个程序在循环里拿出每一次输入的数据,所以每次输入之后,按照要求输出了,之后还是要你输入数据。

Scanner类里值得注意的地方

  首先我们先来看一段程序:

public static void main(String[] args) {//创建Scanner实例Scanner sc = new Scanner(System.in);int a = sc.nextInt();String line = sc.nextLine();System.out.println(a);System.out.println(line);}

  当我运行之后输入第一个数据之后回车,然后程序就结束了,运行结果如下:

  然后经过查阅相关资料之后才发现,nextInt()方法读取的只是数字,当碰到空白符(制表符、空格、回车)就读取空白符之前的,而在我刚才的输入那里,我首先输入了22然后回车,这样nextInt方法只读取了我输入的22,但是22之后的回车没有读取到,而之后nextLine方法读取到了刚才遗留的回车,nextLine方法结束的条件是碰到回车,所以nextLine方法能够获取空格,所以此时读取到了刚才遗留的回车,也就自然结束了nextLine方法。
  所以,如果想要在使用了nextInt后使用nextLine,那么必须在中间插入一个nextLine来将之前遗留的回车给读取到,这样才能够正常读取(前提是你输入了int数据之后回车再输入数据)。所以我们的程序改为:

public static void main(String[] args) {//创建Scanner实例Scanner sc = new Scanner(System.in);int a = sc.nextInt();sc.nextLine();String line = sc.nextLine();System.out.println(a);System.out.println(line);}

  运行结果为:

  目前就先写这么多,以后要是有补充的再继续加上去。

你不知道的Scanner类,细思极恐相关推荐

  1. 细思极恐!未来百万人将下岗十大职业将消失

    细思极恐!未来百万人将下岗十大职业将消失 0 2015年12月2日,中国社会科学院副院长蔡昉.人口与劳动经济研究所所长张车伟主编的<中国人口与劳动问题报告No.16--"十二五&quo ...

  2. 细思极恐,你真的会写 Java 吗

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 非常非常不错的一篇文章,文中提到的很多实践都 ...

  3. java+什么时候才需要deploy_细思极恐 - 什么才是真正的会写 Java ?

    文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行 ...

  4. 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐

    在很多不熟悉程序员的群体中,可能都认为程序员是沉闷一次的代表,但其实不然,很多程序员都是非常幽默有趣且都有一颗非常闷骚的心.这尤其体现在他们呢好玩的代码注释上面,我找了一写奇趣的代码注释类型,小伙伴们 ...

  5. [转载] 细思极恐的星座分析(下)- 外太空?内子宫?人类的天赋从何而来?

    参考链接: 显示给定出生日期的星座或黄道十二宫的Python程序 在看完本文上半部分后,大家应该对星座与人类天赋之间的关系有了比较深刻的了解.在本文下半部分中,我将通过星座来猜测天赋的成因.与&quo ...

  6. 细思极恐!大数据和机器学习揭示十二星座的真实面目

    细思极恐!大数据和机器学习揭示十二星座的真实面目 "为什么我的论文总发表不了,是不是我天生就不是做研究的料?"很多同学在写论文中遇到挫折,经常会发出这样的疑问.那么今天我就用星座, ...

  7. 令我“细思极恐”的Faster-R-CNN

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  8. 细思极恐-你真的会写java吗?

    细思极恐-你真的会写java吗? 导语 自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个ja ...

  9. 细思极恐,你真的会写 java 吗?

    公众号后台回复"学习",免费获取精品学习资料 扫描下方海报 试听 本文来源: http://lrwinx.github.io/2017/03/04/细思极恐-你真的会写java吗/ ...

  10. 【深度长文】细思极恐的YouTube可跳过广告

    [预警]:Youtube的可跳过广告尽管极其精妙(看完你就知道了),但其实并没有到细思极恐的程度:同时本文也并非深度长文,长是比较长,深不深度就另说了!作为一个广告PM,这种标题党行为都是为了优化点击 ...

最新文章

  1. 漫画 | 如果面试时大家都说真话......
  2. linux修改ssh端口
  3. 【Android开发】Android 删除指定文件和文件夹
  4. win7怎么安装nodejs_怎么解决win7安装软件提示
  5. SAP CRM Distribution Chain数据模型
  6. 【java基础】zip压缩文件
  7. 前端学习(2746):uniapp--基本介绍
  8. 蒋涛担任上方新一届董事长,打造 TokenSky 全球区块链服务生态集团
  9. swift基础之_swift调用OC/OC调用swift
  10. 电脑手写输入法_5款好用的拼音输入法软件推荐
  11. window10运行python弹出商店_Python上架Windows 10应用商店,但主要用于学习,正式项目还...
  12. Nginx的入门详解
  13. NTKO打开服务器上的文件
  14. Ubuntu操作系统MTK刷机工具失败解决方案
  15. 永洪科技怎么样_【永洪科技工资|永洪科技待遇怎么样】-看准网
  16. 21-22(2)第2次线上赛
  17. 现在怎么不生产5寸大小的手机了?
  18. keil5(MDK5)配置S3C2440裸机开发调试环境
  19. 《python从入门到项目实践》第六章 列表和元组 //有一个课后答案
  20. Python的第三次作业——陈灵院

热门文章

  1. 从 Codecity 到元宇宙:元宇宙的软件形态会怎样的?
  2. RedHat6.4系统下LAMP环境的搭建---(源码包编译安装)---v1.0
  3. OpenResty Con 2017 见闻杂记
  4. Mac Office 2016 卸载
  5. [023] Android平台的信息推送实现
  6. PDF注释打印不出来是怎么回事?
  7. 机器学习——监督学习、非监督学习、半监督式学习、增强学习
  8. java计算机毕业设计足球赛会管理系统源码+数据库+lw文档+系统+部署
  9. 最快鉴别网工能力的方法,就三个字
  10. 餐饮管理软件,温州最好的餐馆管理软件