Scanner输入时next()和nextLine()可能会发生的错误
当 scanner 的 nextXXX() 方法触发了 InputMismatchException 异常,输入的值会保留,直到你调用了 scanner 的 nextXXX() 或next()方法
public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i = 0; while (i<2){ try { System.out.println("输入一个数字:"); int i1 = scanner.nextInt(); System.out.println("这个数字是:"+i1); }catch (InputMismatchException e){ System.out.println("输入错误"+e); }finally { i++; } } String s = scanner.nextLine(); System.out.println("新数吗"+s); } }
输出结果为:
如果一直InputMismatchException 异常,输入的值会一直保留
如果加上next()方法:
public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i = 0; while (i<2){ try { System.out.println("输入一个数字:"); int i1 = scanner.nextInt(); System.out.println("这个数字是:"+i1); }catch (InputMismatchException e){ System.out.println("输入错误"+e); String next = scanner.next(); System.out.println("next:"+next); }finally { i++; } } String s = scanner.nextLine(); System.out.println("新数吗"+s); } }
输出结果:
加入next()方法之后i可以重新从键盘输入值
那么为什么s无法重新从键盘输入值呢?
因为:
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题
如果其他nextXXX()方法输入有效字符后输入空格,那么nextLine()也自动读取被其去掉的空格