你不知道的Scanner类,细思极恐
一次惨痛的经历,昨晚的腾讯笔试里对输入的处理没处理好,导致在一道题上死磕太久,看来是与腾讯无缘了,吃一堑,长一智吧。
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类,细思极恐相关推荐
- 细思极恐!未来百万人将下岗十大职业将消失
细思极恐!未来百万人将下岗十大职业将消失 0 2015年12月2日,中国社会科学院副院长蔡昉.人口与劳动经济研究所所长张车伟主编的<中国人口与劳动问题报告No.16--"十二五&quo ...
- 细思极恐,你真的会写 Java 吗
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 非常非常不错的一篇文章,文中提到的很多实践都 ...
- java+什么时候才需要deploy_细思极恐 - 什么才是真正的会写 Java ?
文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行 ...
- 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐
在很多不熟悉程序员的群体中,可能都认为程序员是沉闷一次的代表,但其实不然,很多程序员都是非常幽默有趣且都有一颗非常闷骚的心.这尤其体现在他们呢好玩的代码注释上面,我找了一写奇趣的代码注释类型,小伙伴们 ...
- [转载] 细思极恐的星座分析(下)- 外太空?内子宫?人类的天赋从何而来?
参考链接: 显示给定出生日期的星座或黄道十二宫的Python程序 在看完本文上半部分后,大家应该对星座与人类天赋之间的关系有了比较深刻的了解.在本文下半部分中,我将通过星座来猜测天赋的成因.与&quo ...
- 细思极恐!大数据和机器学习揭示十二星座的真实面目
细思极恐!大数据和机器学习揭示十二星座的真实面目 "为什么我的论文总发表不了,是不是我天生就不是做研究的料?"很多同学在写论文中遇到挫折,经常会发出这样的疑问.那么今天我就用星座, ...
- 令我“细思极恐”的Faster-R-CNN
作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...
- 细思极恐-你真的会写java吗?
细思极恐-你真的会写java吗? 导语 自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个ja ...
- 细思极恐,你真的会写 java 吗?
公众号后台回复"学习",免费获取精品学习资料 扫描下方海报 试听 本文来源: http://lrwinx.github.io/2017/03/04/细思极恐-你真的会写java吗/ ...
- 【深度长文】细思极恐的YouTube可跳过广告
[预警]:Youtube的可跳过广告尽管极其精妙(看完你就知道了),但其实并没有到细思极恐的程度:同时本文也并非深度长文,长是比较长,深不深度就另说了!作为一个广告PM,这种标题党行为都是为了优化点击 ...
最新文章
- 漫画 | 如果面试时大家都说真话......
- linux修改ssh端口
- 【Android开发】Android 删除指定文件和文件夹
- win7怎么安装nodejs_怎么解决win7安装软件提示
- SAP CRM Distribution Chain数据模型
- 【java基础】zip压缩文件
- 前端学习(2746):uniapp--基本介绍
- 蒋涛担任上方新一届董事长,打造 TokenSky 全球区块链服务生态集团
- swift基础之_swift调用OC/OC调用swift
- 电脑手写输入法_5款好用的拼音输入法软件推荐
- window10运行python弹出商店_Python上架Windows 10应用商店,但主要用于学习,正式项目还...
- Nginx的入门详解
- NTKO打开服务器上的文件
- Ubuntu操作系统MTK刷机工具失败解决方案
- 永洪科技怎么样_【永洪科技工资|永洪科技待遇怎么样】-看准网
- 21-22(2)第2次线上赛
- 现在怎么不生产5寸大小的手机了?
- keil5(MDK5)配置S3C2440裸机开发调试环境
- 《python从入门到项目实践》第六章 列表和元组 //有一个课后答案
- Python的第三次作业——陈灵院
热门文章
- 从 Codecity 到元宇宙:元宇宙的软件形态会怎样的?
- RedHat6.4系统下LAMP环境的搭建---(源码包编译安装)---v1.0
- OpenResty Con 2017 见闻杂记
- Mac Office 2016 卸载
- [023] Android平台的信息推送实现
- PDF注释打印不出来是怎么回事?
- 机器学习——监督学习、非监督学习、半监督式学习、增强学习
- java计算机毕业设计足球赛会管理系统源码+数据库+lw文档+系统+部署
- 最快鉴别网工能力的方法,就三个字
- 餐饮管理软件,温州最好的餐馆管理软件