关于Scanner类中的nextInt()方法后额外的nextLine()方法


import java.util.Scanner;

public class nextIntAndNextLine {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

		//input your age
		System.out.println("Please enter your age:");
		int age = s.nextInt();

		
		//为什么我们需要这一行?
		s.nextLine();


		//input your answer
		System.out.println("You are " + age + " years old!");
		System.out.println("Do you like being so old?");
		String answer = s.nextLine();
	}
}

如果我们将这一行注释掉,我们会发现下一个输入的nextLine,我们无法输入任何东西


为什么会出现这种情况呢?因为nextInt方法根据分隔符(回车)截取前面的int类型数值,把后面的字节继续 传递下去


换句话说,当我们输入一个数字“10”,然后点回车,实际上我们输入的不是10,而是“10\n”


不过nextInt可不管那些,nextInt截取了其中他最想要的10,剩下的\n会被扔到之后的nextLine()读取。这么一来,nextLine()读到了一个回车键,他就自动结束输入,读取的内容是“”,什么都没读到就结束了。

如果还是觉得绕的话,可以记住这样一个诀窍,当使用nextInt(),next(),nextDouble(),nextFloat()等方法的时候
后面加上一行s.nextLine()即可。




别退出,还没完

那么问题又来了,s.nextLine()为什么又能解决这个问题?
我们得先了解以下两种方法的区别


nextLine()和nextInt()的区别在于:

还是用之前的例子。我们输入10,按回车,实际输入的是10\n

nextInt() 碰到回车\n就结束输入,但他不读取10\n,只读取了10,然后就读取结束,\n丢给后人处理。

nextLine() 碰到回车\n也就结束输入,但它会读取10\n,并且以其读取的回车符为结束。换句话说,就是它会读取回车符之前的所有内容,然后读取回车符,并把它处理掉




那么nextInt方法后面要额外加一个nextLine()方法的理由:

生动形象一点,就是用nextLine帮忙nextInt擦屁股

用额外一行nextLine()来读取多出来的回车符\n并自己处理掉。

防止这个多出来的\n被下一个next方法读到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值