1、问题
Scanner先输入整型再输入字符串时,字符串不能输入的问题
public class TestScanncer{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
System.out.println("请输入你的名字:");
String name = scanner.nextLine();
System.out.println("age:"+age);
System.out.println(name);
}
}
2、原因
Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”(空格,回车)。
nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。
像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。
总之:虚拟机把换行符(\r\n)当做了输入的String类型
3、解决方法
推荐:在输入整型后面再添加一个无效的字符串输入事件
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
sc.nextLine();
String s = sc.nextLine();
int order = sc.nextInt();