next(), nextLine(),nextInt()报错分析
首先,区别next和nextLine
next
next输入的是连续字符串,字符串里不包含空格,遇有效字符开始输入(也就是说在输入有效字符之前,输入空格是没用的),并且遇空格或者enter停止输入
nextLine
输入的字符串包含空格,没有开始输入的限制,只有遇enter在停止
举个栗子:
1.当是next输入时,如果你输入 空格空格空格abc空格空格enter
那么next只会从a开始读取,读取到c结束,而c后输入的两个空格仍然在输入流中
2.当是nextLine输入时,就会从第一个空格开始读取,读取到enter,得到的字符串就是: 空格空格空格abc空格空格
好了,接下来分析加上nextInt的报错:
如果是这样
String str = scanner.next();
int a = scanner.nextInt();
如果是输入: 空格空格空格abc空格空格def enter
首先,next会从a输入到c,后面的:空格空格def enter仍然在输入流中,就会被nextInt读取,
nextInt从d开始读取,但是很遗憾,d并不是int类型,所以会抛出InputMismatchException异常
如果要能使nextInt正常工作,可以在next与nextInt之间加上一个nextLine,这个nextLine的作用就是将:空格空格def enter 读取,这样nextInt的输入就不会受到上面next的错误输入的影响