java的Scanner类写入.nextInt后写入新的.nextLine时的问题
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("输入的数字为:" + num);
System.out.println("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("输入的字符串为:" + str);
System.out.println("程序运行完毕。");
nextInt():接收一个整型数字,它只接收数字
nextLine():接收一串字符串,包括空格、制表符、换行符。
当我们输入数字后,按下了回车键(就是换行符的产生),这时,nextInt()从缓冲区把我们输入的数字读走了,但留下了最后的换行符,等运行到nextLine()的时候,它开始读缓冲区里看有没有内容,然后咱们在输入,但是这时缓冲区里有东西且为换行符。
这时系统不给咱们在此输入字符串的机会就按接着执行之后的程序了。
解决方案1
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("输入的数字为:" + num);
System.out.println("请输入一个字符串:");
//提前在写入一个nextLine然后输出掉那个缓冲区的换行符
scanner.nextLine();
String str = scanner.nextLine();
System.out.println("输入的字符串为:" + str);
System.out.println("程序运行完毕。");
解决方案2
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("输入的数字为:" + num);
System.out.println("请输入一个字符串:");
String str = scanner.next();
System.out.println("输入的字符串为:" + str);
System.out.println("程序运行完毕。");
解决方案3
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("输入的数字为:" + num);
System.out.println("请输入一个字符串:");
//创建新的对象
Scanner scanner1 = new Scanner(System.in);
String str = scanner1.nextLine();
System.out.println("输入的字符串为:" + str);
System.out.println("程序运行完毕。");