要求,不断的输入一个整数,然后打印这个整数。下面给出代码
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()没有报错