一、先看一段正常的代码

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方法的使用注意点的更多相关文章

  1. 【Java】Scanner类nextInt后使用nextLine无法读取输入

    首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中 ...

  2. java.uti.Random类nextInt方法中随机数种子为47的奇怪问题

    一,问题描述 需要生成一个[0,1]的随机数.即随机生成 0 或者 1.使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个 ...

  3. 测试Random类nextInt()方法连续两次结果一样的概率

    public static void main(String[] args) { int count = 0; int a = 0; Random r = new Random(); while (t ...

  4. java中Scanner类nextInt之后用nextLine无法读取输入

    http://blog.csdn.net/wjy1090233191/article/details/42080029 这篇文章写得非常详细和准确

  5. JavaSE中主要的类与方法

    1.instanceof:测试左边的对象是否是右边类的实例;  数组.length:返回的是数组的长度; 2.Scanner类     nextInt():读取键盘录入的整数;  next():读取键 ...

  6. Java常用API(Scanner类)

    Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...

  7. 【Java】 Scanner类的几个方法

    通过 Scanner 类可以获取用户的输入,创建 Scanner 对象的基本语法如下: Scanner sc = new Scanner(System.in); nextInt().next()和ne ...

  8. Scanner类的.next()和.hashNext()方法

    使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...

  9. Java Scanner类中next()和nextLine()方法的区别

    今天在练习中遇到了调用Scanner类中的nextLine()输入字符串自动跳过的问题,在博客上看了两篇解答,原来是nextLine()误认了前面next()输入时的Enter,但还是想了一会儿才弄清 ...

随机推荐

  1. python3之日期和时间(转载)

    转载:https://www.cnblogs.com/zhangxinqi/p/7687862.html a = datetime.datetime.now() time.sleep(10) b = ...

  2. Compiling LIBFFM On OSX 10.9

    原文:http://blog.josephmisiti.com/compiling-libffm-on-osx-10.9/ I recently tried to compile LIBFFM (Fi ...

  3. “/”应用程序中的server错误

    前几天敲ASP.NET有关验证控件的样例的时候,出现了这个问题: 可是对于这个问题我们应该都不陌生,之前敲牛腩的时候也出现过,当时的解决方法是: 在web.config中找         <a ...

  4. redis常用命令记录

    cd App/opt/redis/bin/ ./redis-cli 1.查看所有key值 keys 前缀* 2.删除指定key值 删除一条 del key全名 删除多条 exit ./redis-cl ...

  5. JavaScript原始基础

    一.算法 + 数据结构 = 程序 程序=数据结构+算法是由N.Wirth(沃斯)提出来的. 程序是计算机指令的某种组合,控制计算机的工作流程,完成一定的逻辑功能,以实现某种任务: 数据结构指的是数据与 ...

  6. Java从零开始学二十四(集合工具类Collections)

    一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二 ...

  7. 11个强大的 Visual Studio 调试技能

    简介 调试是软件开辟周期中很首要的一项目组.它具有挑衅性,同时也很让人困惑和懊恼.总的来说,对于稍大一点的法度,调试是不成避免的.比来几年,调试对象的成长让很多调试任务变的越来越简单和省时. 这篇文章 ...

  8. 【实践】源代码分析工具Doxygen+Graphviz

    拿到一个新项目或者一个开源框架,看源代码的方式不是先进行单步调试!最好的方式是先画出整个项目或者开源框架的类.协作.已经方法调用图,能够帮助你更快的理解框架或者项目的设计. 打包下载地址:http:/ ...

  9. 引入css的几种方式

      使用CSS样式的几种方式 CreateTime--2017年10月11日16:45:26 Author:Marydon a.外部样式 a1.链接式(推荐使用) <link href=&quo ...

  10. 〖Linux〗Ubuntu13.04解决Chrome的flash中文乱码的问题。

    1. 安装flash sudo aptitude install flashplugin-installer 2. 禁用chrome自带的flash插件 在chrome浏览器中输入 chrome:// ...