Scanner类中的nextInt()后使用nextLine()方法无效解决方案

首先来看一段简单的代码:

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入一个数字:");
	int num = sc.nextInt();
	System.out.println("输入的数字为:" + num);
	
	System.out.println("请输入一个字符串:");
	String str = sc.nextLine();
	System.out.println("输入的字符串为:" + str);
	
	System.out.println("程序运行完毕。");
	
}

这段代码逻辑很简单,运行程序 -> 输入一个数字 -> 再输入一个字符串 -> 运行完毕。
看上去是没有问题的,但是我们看运行结果:
在这里插入图片描述
可以看到,在输入一个数字后,还没有给我输入字符串的机会,程序就运行完毕了。

原因:

首先来简单了解一下nextInt()和nextLine()它们的运行机制:
nextInt():接收一个整型数字,注意,它只接收数字
nextLine():接收一串字符串,包括空格、制表符、换行符。

这样一来原因就很明显了,当我们输入数字后,是不是按下了回车键,这个时候,nextInt()从缓冲区把我们输入的数字读走了,但留下了最后的换行符,等运行到nextLine()的时候,它开始读缓冲区里的内容,然而好巧不巧的是,刚好缓冲区里留有一个换行符,相当于还没给我们机会去输入东西,就按回车结束了。

解决方案:

  1. 在输入字符串前先把缓冲区里的换行符读取掉,如图所示代码:
    在这里插入图片描述
  2. 用next()取代nextLine(),如图所示代码:
    在这里插入图片描述

以上两种方法均可解决我们的问题,正确的运行结果为:
在这里插入图片描述

但是请注意:
next()这个方法它从缓冲区读取的内容为:从第一个有效字符开始,到最后一个有效字符结束。这里的有效字符指的是非空格、非换行符等,也就是说如果我们输入的字符串中有一个空格,那么next()方法只会读取到这个空格之前的字符,比如下面这个运行结果:
在这里插入图片描述
所以更推荐使用第一种解决方案,先把缓冲区里的换行符读取掉,再开始输入字符串,这样才能真正达到我们想要的效果。

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值