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 = 0 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 = 0 name =[]
execute finish !

咦?说好的阻塞呢?我还没输入字符串怎么就执行结束了???

3. 原因如下:

nextInt方法根据分隔符(回车,空格等)只取出输入的流中分割的第一部分并解析成Int,然后把后面的字节传递下去。
所以,第二种情况键盘实际输入是“0+回车”,nextInt读出了“0”,并留下了“回车”,
接着netxLine读到了一个“回车”,这是字符串的结束判定符啊,所以读到的字符串就是空字符串“”。

4. 有点晕?继续测试:

4.1 运行程序

input id :
0 lings //键盘输入
input name :
4.2 程序输出

id = 0 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 = 0 name =[lings]
execute finish !
时间: 2024-08-03 10:22:02

Scanner类nextInt方法的使用注意点的相关文章

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

首先,我们先介绍一下,在学习Java语言,对于字符串的输入,由于Scanner.next()函数无法输入空格及回车,此时,我们就必须要用Scanner.nextLine()解决这类问题, 在使用过程中,我们会发现nextInt()和nextLine连用,出现这个问题: 在输入一个int数据之后,就会输出,而字符串完全没有输入...... 然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下. 首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的

JavaSE中主要的类与方法

1.instanceof:测试左边的对象是否是右边类的实例;  数组.length:返回的是数组的长度; 2.Scanner类 nextInt():读取键盘录入的整数;  next():读取键盘录入的字符串   nextLIne():读取键盘录入的一行 3.Math类: int min():求最小值;  int max():求最大值  long round():四舍五入;  double ceil():向上取整;  double floor():向下取整; 4.String类: int leng

Scanner类 与 String类

1.1 Scanner类1.1.1 Scanner类作用用Scanner类的方法可以完成接收键盘录入的数据1.1.2 Scanner类接受键盘录入的字符串1.1.2.1 案例代码一: package com.itheima_01; import java.util.Scanner; /* * Scanner:用于获取键盘录入的数据.(基本数据类型,字符串数据) * public String nextLine():获取键盘录入的字符串数据 */ public class ScannerDemo

第2章 Scanner类 与 String类

1.1 Scanner类1.1.1 Scanner类作用用Scanner类的方法可以完成接收键盘录入的数据1.1.2 Scanner类接受键盘录入的字符串1.1.2.1 案例代码一: package com.itheima_01; import java.util.Scanner; /* * Scanner:用于获取键盘录入的数据.(基本数据类型,字符串数据) * public String nextLine():获取键盘录入的字符串数据 */ public class ScannerDemo

java Scanner类的nextInt()方法在循环中无法停止的问题

我们先看JAVA的api文档中的原话: 当扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳它. 这是java API文档中的原话. 其实其意思就是说:```如果nextInt方法执行时输入a字符,这个时候没有成功解析出一个整数,那么你的本次输入不会被忽略.因为它或许能被其它格式解析.那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继

Java中Scanner类在nextInt()后无法输入nextLine()的问题

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符. nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉. 了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的

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

使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同的构造器可接受文件.输入流.字符串作为数据,用于从文件.输入流.字符串中解析数据. Scanner主要提供了两个方法来扫描输入: (1)   hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int.Long等代表基本数据类型的字符串.如果需要判断是否包含下一个字符串,可以省略Xxx.

java之Scanner类

1.Scanner类概述 Scanner类概述:JDK5以后用于获取用户的额键盘输入 构造方法:public Scanner(InputStream source) 2.Scanner类的成员方法 基本格式: hasNextXxx()判断是否还有下一个输入项,其实Xxx可以是Int,Double等.如果需要判断是否包含下一个字符串,则可以省略Xxx. nextXxx()获取下一个输入项.Xxx的含义和上一个方法中的Xxx相同. 默认情况下,Scanner使用空格,回车等作为分隔符 常用方法: p

JAVA IO:Scanner类

使用Scanner类接收输入数据. JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能,也可以方便的对输入数据进行验证,此类存放于JAVA.UTILL包中. 常用方法如下: 此类不在java.io中,而在java.utill类,所以此类是一个工具类. 1,使用Scanner接收键盘输入数据 package 类集; import java.util.* ; public class ScannerDemo01{ public static void main(Stri