2022.3.9使用Scanner类控制台输入时出现直接跳过输入过程问题

使用Scanner类控制台输入时出现直接跳过输入过程问题

1  Scanner scanner = new Scanner(System.in);
2  System.out.println("输入第一个数");
3  double a = scanner.nextDouble();
4  System.out.println("输入+,-,*,/");
5  String s = scanner.nextLine();
6  System.out.println("输入第二个数");
7  double b = scanner.nextDouble();

会直接跳过第二个输入

1  Scanner scanner = new Scanner(System.in);
2  System.out.println("输入+,-,*,/");
3  String s = scanner.nextLine();
4  System.out.println("输入第一个数");
5  double a = scanner.nextDouble();
6  System.out.println("输入第二个数");
7  double b = scanner.nextDouble();

调换顺序后正常输入

 

是由于Scanner 类对象中的 nextInt() 和 nextLine() 方法内部读取原理不同导致的。 对于nextLine()方法,在该例子中,当i调用nextLine()方法时,读取的是字符串形式,输入的内容就相当于在一个管道中。 在未输入的时候,类似于阻塞状态,当输入内容之后,输入回车,然后nextLine()方法就开始读取内容,nextLine的读取方式是将enter回车符号(\r\n)和输入内容一同读取出来,在赋值的时候它再将enter回车符除去。

 

对于nextDouble()方法,在该例子中,当调用nextDouble()方法时,读取的是Double型,输入的内容就相当于在一个管道中。 在未输入的时候,类似于阻塞状态,当输入内容之后,输入回车,然后nextDouble()方法就开始读取内容,nextDouble的读取方式是将enter回车符号(\r\n)之前的输入内容读取出来,Enter回车符留在里里面。类似的还有nextLong(),nextInt()等

 

看到这,便可以解释这个神奇的事情了。 当先输入数字时调用的是nextDouble()方法,读取完后剩下一个Enter回车符,不巧的是接下来输入姓名的时候,调用的是nextLine()方法,这时刚好有一个Enter回车符,它便以为输入完了就直接将Enter前面的空串读取进去了,所以我们看着的效果就像是直接跳过了输入符号过程。

有三个解决方法:

  1. 在调用nextDouble()方法之后,nextLine()方法之前,加上一个语句 scanner.nextLine(); 将nextDouble()读取后剩下的Enter回车符先读取掉。

1  Scanner scanner = new Scanner(System.in);
2  System.out.println("输入第一个数");
3  double a = scanner.nextDouble();
4  scanner.nextLine();//将回车符提取出来
5  System.out.println("输入+,-,*,/");
6  String s = scanner.nextLine();
7  System.out.println("输入第二个数");
8  double b = scanner.nextDouble();
  1. 使用 next() 方法之前代替 nexLine() 方法。

1  Scanner scanner = new Scanner(System.in);
2  System.out.println("输入第一个数");
3  double a = scanner.nextDouble();
4  System.out.println("输入+,-,*,/");
5  String s = scanner.next();//使用next()方法之前代替nexLine()方法
6  System.out.println("输入第二个数");
7  double b = scanner.nextDouble();
  1. 都使用nextLine()方法,赋值的时候再进行类型转换。

1  Scanner scanner = new Scanner(System.in);
2  System.out.println("输入第一个数");
3  int a = Integer.parseInt(scanner.nextLine());
4  System.out.println("输入+,-,*,/");
5  String s = scanner.nextLine();
posted @ 2022-03-09 23:02  暴躁C语言  阅读(218)  评论(0)    收藏  举报