Scanner类nextInt方法的使用注意点
一、先看一段正常的代码
1. 一段用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. 测试结果
2.1 运行程序
input name :
lings //键盘输入
input id :
0 //键盘输入
2.2 程序输出
id = name =[lings]
execute finish !
和预期一样。
二、一个小变化,颠倒一下取值类型的顺序
1. 一段改变了取值顺序的代码:
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 = name =[]
execute finish !
咦?说好的阻塞呢?我还没输入字符串怎么就执行结束了???
3. 原因如下:
nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。
所以,第二种情况键盘实际输入是“+回车”,nextInt读出了“”,并留下了“回车”,
接着netxLine读到了一个“回车”,这是字符串的结束判定符啊,所以读到的字符串就是空字符串“”。
4. 有点晕?继续测试:
4.1 运行程序
input id :
0 lings //键盘输入
input name :
4.2 程序输出
id = name =[ lings] //注意空格
execute finish !
这下清楚了吗?
三、使用注意事项
需要从键盘输入多个参数,尽量把nextLine类型放前面,nextInt放后面,实在不行。
nextInt后面要跟一个nextLine方法“消化”掉那个多余的字符串。
1. 消化掉多余字符串的例子
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. 测试结果
2.1 运行程序
input id :
0
input name :
lings
2.2 程序输出
id = name =[lings]
execute finish !
Scanner类nextInt方法的使用注意点的更多相关文章
- 【Java】Scanner类nextInt后使用nextLine无法读取输入
首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中 ...
- java.uti.Random类nextInt方法中随机数种子为47的奇怪问题
一,问题描述 需要生成一个[0,1]的随机数.即随机生成 0 或者 1.使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个 ...
- 测试Random类nextInt()方法连续两次结果一样的概率
public static void main(String[] args) { int count = 0; int a = 0; Random r = new Random(); while (t ...
- java中Scanner类nextInt之后用nextLine无法读取输入
http://blog.csdn.net/wjy1090233191/article/details/42080029 这篇文章写得非常详细和准确
- JavaSE中主要的类与方法
1.instanceof:测试左边的对象是否是右边类的实例; 数组.length:返回的是数组的长度; 2.Scanner类 nextInt():读取键盘录入的整数; next():读取键 ...
- Java常用API(Scanner类)
Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...
- 【Java】 Scanner类的几个方法
通过 Scanner 类可以获取用户的输入,创建 Scanner 对象的基本语法如下: Scanner sc = new Scanner(System.in); nextInt().next()和ne ...
- Scanner类的.next()和.hashNext()方法
使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...
- Java Scanner类中next()和nextLine()方法的区别
今天在练习中遇到了调用Scanner类中的nextLine()输入字符串自动跳过的问题,在博客上看了两篇解答,原来是nextLine()误认了前面next()输入时的Enter,但还是想了一会儿才弄清 ...
随机推荐
- 让 IE6, 7和 8支持CSS3的HTC文件补丁
让 IE6, 7和 8支持CSS3 IE6,7并不支持CSS3的属性,IE8也不能很好的支持CSS3.但是有一个小脚本能够做到,它可以让IE支持CSS3,包括:border-radius (round ...
- scala 学习笔记八 简洁性
Scala可以简洁地表示概念,有时甚至可以说过于简洁. 1.消除中间结果 在组合表达式中,最后一个表达式会变成整个表达式的结果.下面的例子中,值会被捕获到val result中,然后result从方法 ...
- GIT 恢复已删除的提交
在Git中一切的操作都是可以恢复的,包括已经删除的提交,今天在做一个项目时就遇到了这种问题,也不知道是怎么回事不小心就把上午提交的所有代码都删除了,于是赶紧通过git log来查看日志,但奇怪的是当时 ...
- 在Fedora8上安装使用ActiveMQ5.8
[ActiveMQ安装] ActiveMQ在win平台的安装简单,在Linux Fedora上安装也不难,解压就可以了.以下是我总结的步骤: 第一步,从以下地址下载apache-activemq-5. ...
- PS中标尺工具在哪里
打开photoshop应用程序,然后在PS菜单中点击“视图——标尺”选项即可打开ps标尺栏. 单位设置: 按Ctrl+K快捷键会弹出“首选项”对话框,你选择“单位与标尺”项,在“单位”一栏里 ...
- 【OpenCV新手教程之十七】OpenCV重映射 & SURF特征点检測合辑
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- Spring Boot 中 Controller 使用
1.属性配置 2.Controller使用 2.@PathVariable 与 @RequestParam 的区别 (1)@PathVariable (2)@RequestParam 3.@GetMa ...
- 关于zookeeper的自我解惑
分布式服务框架 Zookeeper -- 管理分布式环境中的数据: http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ ...
- java 泛型 精析
Created by Marydon on 1.概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数: 这种参数类型可以用在类.接口和方法的 ...
- 【Oracle】(savepoint)保存点的使用
作用 保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,在操作失误的时候就可以回滚到某个点即可. 实现步骤 我们现在新建一张表TMP003 )); 第一步:插入第一条记录 ...