我有以下Java代码:
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter your name>>");
String name = input.next();
System.out.println("Enter your year of birth>>");
int age = input.nextInt();
System.out.println("Name: " + name);
System.out.println("Year of Birth: " + age);
System.out.println("Age: " + (2012 - age));
} catch (InputMismatchException err) {
System.out.println("Not a number");
}
当我输入带有空格的名称(例如“ James Peterson”)时,我会正确输出下一行(输入您的出生年份),然后立即输入InputMismatchException。该代码使用不带空格的单个名称。有什么我想念的吗?
最佳答案
System.out.println("Enter your name>>");
String name = input.next();
System.out.println("Enter your year of birth>>");
int age = input.nextInt();
Scanner,使用定界符模式将其输入分为令牌,默认情况下,该模式与空格匹配。
当您输入“ James Peterson”时,Scanner#next()将“ James”作为令牌并将其分配给
String name
,然后您执行Scanner#nextInt(),将“ Peterson”作为下一个令牌,但这不是可以被强制转换为int
,因此,如果下一个标记与nextInt()
正则表达式不匹配或超出范围,则InputMismatchException as InputMismatchException
将抛出Integer
。关于java - 扫描仪的InputMismatchException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16139337/