0

我有以下的Java代码:InputMismatchException,使用扫描仪

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"); 
    } 

当我输入一个名称用空格(如“詹姆斯·彼得森”),我正确地得到下一个线路输出(输入你的出生年份)然后立即发生InputMismatchException。该代码使用不带空格的单个名称。有什么我失踪?

回答

1
System.out.println("Enter your name>>"); 
    String name = input.next(); 
    System.out.println("Enter your year of birth>>"); 
    int age = input.nextInt(); 

Scanner打破其输入到使用定界符图案,它默认与空白匹配。

当你进入“詹姆斯·彼得森”Scanner#next()以“詹姆斯”的标记,并将其分配给String name,然后你做一个Scanner#nextInt()这需要“彼得森”作为下一个标记,但它是不是如果下一个标记与Integer正则表达式不匹配或者超出范围,则可以投射到int,因此将抛出InputMismatchException

+0

谢谢。任何想法如何我可以解决这个问题? – ReignOfComputer 2013-04-22 04:27:40

+0

没关系我知道了,我已经将'input.next()'改为'input.nextLine()'。谢谢! :D – ReignOfComputer 2013-04-22 04:30:17

+0

我想设置'Scanner.useDelimiter(Pattern.compile(“[\\ r \\ n;] +”));'可能会工作,并在下一行输入每个标记。 – NINCOMPOOP 2013-04-22 04:30:41