java Scanner 输入


要求,不断的输入一个整数,然后打印这个整数。下面给出代码

public class TestINput {
	public static void main(String[] args) {
		fun1();
		//fun2();
	}
	public static void fun1(){
		Scanner in = new Scanner(System.in);
		while(in.hasNextLine()){
			System.out.println(in.nextInt());
		}
	}
	public static void fun2(){
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			System.out.println(in.nextInt());
		}
	}
}
fun1()和fun2()都能实现这个功能,但是大家有没有发现不同。如果我们不断的输入,然后按ctrl+z结束输入,我们发现fun1()报错,错误如下:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.sunny.company.huaweiqj.TestINput.fun1(TestINput.java:13)
at com.sunny.company.huaweiqj.TestINput.main(TestINput.java:7)

假设我们输入数字 1 然后回车,那么此时输入缓存中为  1\n,注意\n为回车符,由于fun1用

while(in.hasNextLine()){} 来判断输入,那么当<pre name="code" class="html">in.nextInt() 读取了1后,此时缓存中还有\n,那么循环继续,下面就是<pre name="code" class="html">in.nextInt()这个语句,那么你按了ctrl+z,此时已经没有输入,所以会报错。
而fun2()用的是hasNext(),hasNext()判断\n返回的是false,所以fun2()没有报错

 
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值