一、先看一段正常的代码

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. 使用jQuery在上传图片之前实现缩略图预览

    使用jQuery在上传图片之前实现缩略图预览 jQuery代码 01 $("#uploadImage").on("change", function(){ 02 ...

  2. 对SingleTask和TaskAffinity的理解

    最近研究微信调起自己客户端的事情,对于SingleTask和TaskAffinity的理解又多了一些理解. 以前对于Android的四种LaunchMode有一些了解,其中比较有意思的就是Single ...

  3. 编译和使用 MySQL C++ Connector

    记录编译 mysql C and C++ connector 和简单访问数据库. 环境: vs2012,  mysql 5.6.13, 基于x64 0. 软件包 mysql http://dev.my ...

  4. 我对REST的理解

    1:rest的由来 REST即表述性状态传递(英文:Representational State Transfer,简称REST) 通俗点说:资源在网络中以某种表现形式进行状态转移. 源于REST之父 ...

  5. (LeetCode 21)Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  6. 云端软件平台 封装了诺基亚PC套件无法找到驱动怎么办

    1 在设备管理器中可以看到你的手机驱动器位感叹号. 2 右键→更新驱动程序→从列表指定位置安装→搜索位置选择C:\ProgramFiles\Nokia\ConnectivityCableDriver ...

  7. Singular value encountered in calculation for ROI

    在ENVI中对一幅TM影像进行监督分类,在进行compute ROI separability时提示Singular value encountered in calculation for ROI, ...

  8. JDK5.0特性,使用ProcessBuilder执行本地命令

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IO ...

  9. Linux必看书籍

    <鸟哥的Linux私房菜:基础学习篇(第三版)> <鸟哥的Linux私房菜——服务器架设篇> <高性能Linux服务器构建实战> <实战Nginx:取代 Ap ...

  10. ci高级使用方法篇之连接多个数据库

    在我们的项目中有时可能须要连接不止一个数据库.在ci中怎样实现呢? 我们在本地新建了两个数据库,例如以下截图所看到的: 改动配置文件database.php文件为例如以下格式(读者依据自己数据库的情况 ...