当Scanner.nextInt()遇到了Scanner.nextLine()
一、先看一段正常的代码
- 一段用Scanner捕获键盘输入的代码:
Scanner sc = new Scanner(System.in);
// 先读取键盘输入的字符串
System.out.println("input name :");
String name = sc.nextLine();
// 后读取键盘输入的int值
System.out.println("input id :");
int id = sc.nextInt();System.out.println("id = " + id + " name =[" + name + "]");
System.out.println("execute finish !");
- 测试结果
2.1 运行程序
input name :
lings //键盘输入
input id :
0 //键盘输入
2.2 程序输出
id = 0 name =[lings]
execute finish !
和预期一样。
二、一个小变化,颠倒一下取值类型的顺序
- 一段改变了取值顺序的代码:
Scanner sc = new Scanner(System.in);// 先读取键盘输入的int值
System.out.println("input id :");
int id = sc.nextInt();// 后读取键盘输入的字符串
System.out.println("input name :");
String name = sc.nextLine();System.out.println("id = " + id + " name =[" + name + "]");
System.out.println("execute finish !");
咦?说好的阻塞呢?我还没输入字符串怎么就执行结束了???
2. 测试结果
2.1 运行程序
input id :
0 //键盘输入
input name :
2.2 程序输出
id = 0 name =[]
execute finish
咦?说好的阻塞呢?我还没输入字符串怎么就执行结束了???
3. 原因如下:
nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。
所以,第二种情况键盘实际输入是“0+回车”,nextInt读出了“0”,并留下了“回车”,
接着netxLine读到了一个“回车”,这是字符串的结束判定符啊,所以读到的字符串就是空字符串“”。
- 有点晕?继续测试:
4.1 运行程序
input id :
0 lings //键盘输入
input name :
4.2 程序输出
id = 0 name =[ lings] //注意空格
execute finish !
这下清楚了吗?
三、使用注意事项
需要从键盘输入多个参数,尽量把nextLine类型放前面,nextInt放后面,实在不行。
nextInt后面要跟一个nextLine方法“消化”掉那个多余的字符串。
- 消化掉多余字符串的例子
Scanner sc = new Scanner(System.in);System.out.println("input id :");
int id = sc.nextInt();
sc.nextLine();
System.out.println("input name :");
String name = sc.nextLine();System.out.println("id = " + id + " name =[" + name + "]");
System.out.println("execute finish !");
- 测试结果
2.1 运行程序
input id :
0
input name :
lings
2.2 程序输出
id = 0 name =[lings]
execute finish !
当Scanner.nextInt()遇到了Scanner.nextLine()相关推荐
- java scanner输入数组_Java Scanner输入两个数组的方法
题目 从命令行读入两个数组的长度和数组的值,其中第一行两个数na和nb代表aa和bb数组的长度 代码 import java.util.Scanner; public class Z { public ...
- 几句话直观理解java中Scanner类的next()、nextLine()、nextInt()
很多关于上述几个方法的介绍都非常晦涩,很复杂,我们在处理相关问题时只需要记住以下规律即可: (1)Scanner是一个扫描器,对于键盘输入或者文件中的数据,先存到缓存区等待读取,它判断读取结束的标示是 ...
- 什么是Scanner?next()和hasNext() ? nextLine()和hasNextLine()?
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. Scanner sc = new Scanner(System.in); 通过 Sca ...
- Scanner类的next()和nextLine()
用户交互 scanner类来获取用户的输入 Scanner类的next()和nextLine() 方法获取输入的字符串,在读取前我们一般使用hasNext()与hasnextLine()判断是否还有输 ...
- java中scanner中nextint,Java Scanner nextInt()方法
Java Scanner nextInt()方法 java.util.Scanner.nextInt() 方法扫描输入的下一个标记为int.形式nextInt()方法的调用和调用nextInt(rad ...
- java的nextint种子_java.util.Scanner.nextInt(int radix)方法实例
全屏 java.util.Scanner.nextInt()方法扫描输入的下一个标记为int.此方法将抛出InputMismatchException,如果如下文所述的下一个标记不能转换为有效的int ...
- java scanner类int_Java之 Scanner类
1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...
- java scanner类 构造器,Java Scanner类
本文概述 Java的Scanner类可在java.util包中找到. Java提供了多种从键盘读取输入的方法, java.util.Scanner类就是其中之一. Java Scanner类使用默认为 ...
- 关于nextInt()、next()和nextLine()的用法
nextInt(): nextInt()只读取数值,剩下"\n"还没有读取 hasNextInt()用于判断键盘输入的下一个字符串是否为Int类型,返回boolean. nex ...
最新文章
- 怎么将对象里面部分的属性放到一个空的对象里面去
- 技术图文:如何解决 DAO 抛出的 80040154 错误?
- 图像金字塔操作,上采样、下采样、缩放
- 16:00面试,16:08就出来了 ,问的实在是太...
- Hibernate的命名查询(NamedQuery)
- C语言源代码展示:常用转换函数实现原理
- linux shell for 循环变量,shell for循环、循环变量值付给其他shell脚本的方法
- 1120 Friend Numbers
- js 难点之原型理解
- 四、登录注册页功能实现《iVX低代码/无代码个人博客制作》
- ARM指令集与Thumb指令集与Thumb-2指令集的区别
- Java实现基于Cookie的单点登录看这篇文章就够了
- MaskRCNN源码解析1:整体结构概述
- 如何刷百度搜索下拉框进行营销引流?
- 解决oracle出现the account is locked问题以及出现not logged on
- python access violation_Python x64下ctypes动态链接库出现access violation的原因分析
- jenkins 怎么配置阿里企业邮箱进行email发送
- 一个简单的storyboard示例,其中关于添加navigation的部分可以学习,此前没用过
- Virustotal——上传样本保存扫描结果
- Echarts的配置与使用
热门文章
- App 运行后屏幕顶部和底部各留黑边问题 - iOS
- 阅读笔记:黑碳对于冰雪辐射效应的影响
- STM32F4与STM32L4,SPI DMA HAL 关闭片选 时机探讨
- Java操作redis设置第二天凌晨过期
- 在录音等情况下保持屏幕长亮
- CodeForces103B - Cthulhu 解题报告
- 【解决方法】hexo g 报错 OperationalError: EPERM: operation not permitted, unlink ...
- APM应用性能管理工具Pinpoint测评
- HID蓝牙遥控器 - 支持键盘、鼠标、影音遥控器(开源)
- 计算机vb知识点,计算机高职专业VB知识要点003 VB基础知识,案例:逐行输出