1 需求

当我们需要使用java从键盘输入数据时,使用到Scanner进行输入字符串时,可能会遇到一些小bug,比如:

1
2
3
4
5
6
7
public class Input {
public static void main(String[] args) {
int age = scanner.nextInt();
String name = scanner.nextLine();
String sex = scanner.nextLine();
}
}

输出:

为什么会这样呢?

2 原因解释

因为scanner.nextLine()会接收一行数据,而scanner.next()是接收有效字符(除空格和enter等之外的所有字符)之前的数据,所以当输入完age值后,按下enter键之后,这个enterscanner.nextLine()给吸收了,也就被其当做一个值给接收了,所以就自动跳过了中间的name,所以会导致出现bug

不过没关系,解决办法就是在需要真正接收的变量前加一个空的scanner.nextLine(),将上一个输入的enter给接收了,这样就不会出bug了。

改正代码:

1
2
3
4
int age = scanner.nextInt();
String _ = scanner.nextLine();
String name = scanner.nextLine();
String sex = scanner.nextLine();

参考文献

  1. http://blog.sina.com.cn/s/blog_93dc666c0101h00f.html

写在最后

欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
微信公众号