Java Scaner小问题
一、问题描述
今天,朋友问我一个问题,他小弟在使用Scaner获取输入的时候,报了个异常,问题如下:
Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:819)at java.util.Scanner.next(Scanner.java:1431)at java.util.Scanner.nextInt(Scanner.java:2040)at java.util.Scanner.nextInt(Scanner.java:2000)at com.test.other.Test.main(Test.java:14)
二、问题重现
他给了我代码,我大概看了一下,自己写了个问题代码,详细代码如下:
public class Test {public static void main(String[] args) {int firstNum = 0; //一个int类型的变量,默认值为0int SecondNum = 0;//一个int类型的变量,默认值为0Scanner input = new Scanner(System.in);//获取一个输入源System.out.println("please input First Number");//提示firstNum = input.nextInt();System.out.println("please input Second Number");//提示SecondNum = input.nextInt();}
}
运行结果:
please input First Number
2
please input Second Number
3
Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:819)at java.util.Scanner.next(Scanner.java:1431)at java.util.Scanner.nextInt(Scanner.java:2040)at java.util.Scanner.nextInt(Scanner.java:2000)at com.test.other.Test.main(Test.java:14)
三、查找原因
InputMismatchException,查看源文档
public class InputMismatchException
extends NoSuchElementExceptionThrown by a Scanner to indicate that the token retrieved does not match the pattern
for the expected type, or that the token is out of range for the expected type.Since:1.5
See Also:Scanner, Serialized Form
Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected
type, or that the token is out of range for the expected type.
大概意思就是:这个异常由Scanner抛出,表明检索到的令牌不匹配期望类型的模式,或者该标记超出预期类型的范围。(我读出来一个东西,不是你告诉我的要读的类型,不知道是什么类型,反正我没预计到会有这么一个类型)
结合我们这里翻译就是:你告诉我要读一个int,结果我读出来的不是一个int类型的数据。
四、代码跟踪
这里我们去看一下Scanner到底读到了什么。我们Debug模式跟进一下:
开始的时候(缓存区为空)
第一次输入一个2
第二次输入一个3
五、总结问题
预计问题发生原因,第二次读取的时候获取到了hb[3]这个位置的数据
通过下面,我们更加直观的看见,缓存中hb[3]为空格字符
很明显,空格转int肯定会报错。
六、深度分析
那么,这个空格是怎么回事呢?我们到其上一层看一下
在这里我们看见,2后面明显3多了一点东西(其实就是一个空格),这个东西是怎么多的,我们先不管(因为我也还没找到原因),但是在这里,我们可以看见这个空格是在第一行的,也就是说,我们第二次读取的时候,是从第一行的2后面开始的,具体有没读到第二行,我们还不清楚,但是我们清楚的是nextInt()读取之后,焦点依旧会停留在上一行,不会从第二行开始读取。这就牵涉到Scanner各种读取方式的焦点是否会换行的问题。这些问题就大家自行查找了吧。
少年易学老难成,一寸光阴不可轻。
—— 与诸君共勉
Java Scaner小问题相关推荐
- in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...
前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,<借助云开发实现小程序订阅消息和模板消息的推送功能>是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序 ...
- vue小米商城源代码_微信商城信息管理系统(java后台+小程序)
前一段时间在公众号中发布了一套微信商城信息管理系统(java后台+小程序),也许大家可能都还记得.今天再给大家重复呈现一遍.重新梳理下,方便大家理解这是做什么用的,以便日后使用.开始正题 01 编写目 ...
- 分享几个Java面试小技巧,建议收藏!
Java可谓编程界的元老,其资深地位无人撼动.那么学习Java的你,在面试时过五关斩六将还顺利吗?通常来讲,程序员的逻辑思维很清晰,在表达自我方面直接,但这在面试中可行不通,毕竟面试涉及到人际交流,所 ...
- Java web小项目_个人主页(2)—— 边缘加速原理与实现
摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...
- Java web小项目_个人主页(1)—— 云环境搭建与项目部署
摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...
- Java一个小练习----String类型转换int类型
Java一个小练习 把字符串str分割程String数组,然后转换成int数组,排序 String str = "123 345 89 93 2 6573 223" 然后在拼接成一 ...
- java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一次写java的小游戏 想实现点击右下角的暂停 实现游戏的暂停和继续 不知道该怎么加,自己找了线程的内容但试了还是成功不了,求大佬们帮一下小白.代码有点 ...
- java transferto_小六六学Netty系列之Java 零拷贝
前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger种一棵树最好的时间是十年前,其次是现在 我知道很多人不玩qq了 ...
- 用JAVA制作小游戏——飞机大战(三)
本篇博客是对飞机大战游戏项目完整代码的展示 详细代码讲解: 用JAVA制作小游戏--飞机大战(一) 用JAVA制作小游戏--飞机大战(二) 最下方附整个程序的文件下载链接 代码展示 主界面 impor ...
最新文章
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- python3安卓版下载-QPython3H安卓运行Python神器
- SQLserver单表数据导入导出
- 预测分析:R语言实现2.6 特征选择
- linux KVM win虚拟机磁盘扩容(qcow2)
- xshell 5如何选中即复制,右键即粘贴
- ARM指令寻址方式之: 数据处理指令的寻址方式
- Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改
- IOS15给UICollection添加测试数字
- 我不想再活在别人的世界里
- Facebook哭晕在厕所,调查显示用VR体验社交的用户仅为19%
- VGGNet原理和实现
- 五分钟搭建一个MarkDown文档解析器
- 驰骋工作流-表单设计-从表多表头-功能讲解
- DEV CPP中使用Clang
- PDF文件怎么转换成Excel表格?学会这个方法轻松转换。
- 通信标准2之PUSCH非动态传输 Configured Grant Type 1 和 Type 2
- Linux 发展史小览
- FaceNet 读书笔记
- 电影评论分类(python深度学习——二分类问题)