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