在读取控制台输入的数据时,遇到了一个问题:利用Scanner类时在nextInt()后无法使用nextLine()完成字符串的读取,如果数据在同一行以空格隔开,则int类型数据读取成功,String类型数据会多一个字符串,如果数据以回车隔开,在输入int数据后按回车就将输出语句执行,有时还报数据输入出错异常
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n, m;
while(sc.hasNext())
{
n = sc.nextInt();
// m = sc.nextInt();
String str = sc.nextLine();
System.out.println("n=" + n + "str=" + str);
}
}
原因:nextInt()方法根据分隔符比如空格,回车符等从输入流中分割出第一部分将其存入已经定义的int类型的数据中,然后将控制台输入的其他字符传递下去,所以按照上述代码程序从控制台得到了“1+enter”,于是n得到了1,回车留给了str,接着输入自己想输入的字符串就会报错。
解决办法:
1、不要求输入数据的类型先后时,将nextLine()放在nextInt()之前进行控制台输入
2、要求输入数据的输入顺序时,在nextInt()后加一行sc.nextLine()去解决那个多余的字符串