项目场景:
Scanner 输入出现问题
问题描述:
- 问题: 当调用一个以空格为分割符号的录入之后,又调用了以回车符为分隔符的方法.你会发现当你录入第一个数据之后,第二个不会等待你录入,程序就结束了.
import java.util.Scanner;
public class ScannerProblem_03 {
public static void main(String[] args) {
/*
Scanner sc = new Scanner(System.in);
// 解决方式1
System.out.print("请录入一个整数:");
// int num = sc.nextInt();
String number = sc.nextLine();
int num = Integer.parseInt(number); // 这个方法的作用就是把一个字符串转为int数据
System.out.println(num);
System.out.print("请录入您的姓名:");
String name = sc.nextLine();
System.out.println("-----"+name+"++++++");
// 解决方式2
Scanner sc2 = new Scanner(System.in);
System.out.print("请录入一个整数:");
int num2 = sc2.nextInt();
System.out.println(num);
Scanner sc3 = new Scanner(System.in);
System.out.print("请录入您的姓名:");
String name3 = sc3.nextLine();
System.out.println("-----"+name3+"++++++");
*/
Scanner sc = new Scanner(System.in);
// 解决方式3
System.out.print("请录入一个整数:");
int num = sc.nextInt(); // 12 \r
sc.nextLine();// 就一个目的取走残留的回车符: \r
System.out.println(num);
System.out.print("请录入您的姓名:");
String name = sc.nextLine();
System.out.println("-----"+name+"++++++");
}
}
原因分析:
以空格为分割符号的录入不会读取输入完成之后的回车
回车符号在缓冲区中下一个以回车符为分隔符的方法会读取缓冲区中的回车符
解决方案:
1.两次都调用nextLine()方法.第一次就会残留的换行符取走, 下一个nextLine取数据的时候Scanner里什么数据都没有,只能等待用户录入
2.创建两个Scanner对象, 第二Scanner和第一个Scanner就不是同一个对象, 录入的数据存储的位置也不一样. 第二个Scanner的nextLine方法只能等待用户录入.
3.常用的就是第一种方案, 录入基本类型数据先用字符串存储.再想办法把字符串转为基本类型数据.