当Scanner.nextInt()遇到了Scanner.nextLine()

一、先看一段正常的代码

  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 !");
  1. 测试结果

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读到了一个“回车”,这是字符串的结束判定符啊,所以读到的字符串就是空字符串“”。
  1. 有点晕?继续测试:

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 !");
  1. 测试结果

2.1 运行程序
input id :
0
input name :
lings

2.2 程序输出

id = 0 name =[lings]
execute finish !
微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值