本人也是刚开始学习java语言,在学习的过程中,老师让我们做一个模拟学生学籍管理系统的小程序。因为刚开始,做的是比较简单的,用switch语句做界面,然后配合Scanner 接收输入的数字进行跳转,完成各类操作。因为跳转时输入的是数字,而跳转后的操作要输入字符串,比如:“选择1添加学生信息…输入添加学生的姓名…”这类的操作在测试的时候总是无法输入字符串

像这个样子,先用nextInt()再用nextLine()不会有接收字符串的效果。然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下。

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。

nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

知道了原理,那么解决方法就比较简单了:

1:可以再nextInt()方法后面多加一句nextLine()方法专门用来取出缓冲区中留下的空白符,像这样:

像上边的第10行代码,就是专门用来取出缓冲区中残留的空白符的。

2:可以只用nextLine()方法,然后通过Integer类中的parseInt()方法解析成int数据。因为nextLine()方法会自动清理掉后边的空白符,这种方法就不会产生最开始那种错误了,

--------------------- 

作者:wjy1090233191 

来源:CSDN 

原文:https://blog.csdn.net/wjy1090233191/article/details/42080029 

转载文章,仅供学习

最新文章

  1. 公司内部培训AlwaysOn PPT分享
  2. Ubuntu 16.04安装QQ国际版图文详细教程
  3. photoshop, 钢笔上色
  4. 5.Android之image控件学习
  5. 【SpringMVC】SpringMVC系列8之Servlet API 作为入参
  6. html标签属性
  7. HDU 1598 find the most comfortable road 并查集+贪心
  8. QQ互发消息
  9. 005.ClearStoredGroups方法
  10. 学习PS必须弄懂的专业术语
  11. You can Solve a Geometry Problem too(判断两线段是否相交)
  12. 常用校验码(奇偶校验,海明校验,CRC)学习总结
  13. 解决浏览器兼容ES6特性
  14. Mac下安装多版本python
  15. springcloud Ribbon学习笔记二
  16. Iterator 接口
  17. Window应急响应(四):挖矿病毒
  18. 整合mybaties 逆向生成 pojo mapper.xml
  19. querySelectorAll()方法
  20. 阿里云centos 安装禅道

热门文章

  1. Wannafly挑战赛22 C 多项式(大数,多项式极限)
  2. P1086 花生采摘题解
  3. [uboot] (第二章)uboot流程——uboot-spl编译流程(转)
  4. Python修炼之路-模块
  5. redis高可用(一)主从复制
  6. 负载均衡(三)Nginx的安装配置
  7. NOIP2016提高A组模拟9.17总结
  8. windows如何禁用惹人烦的开机启动广告
  9. caffe 安装
  10. SQL 使用分区方法