2014-09-10 136 views
0

爲什麼掃描儀在異常發生後不讀取值?這是代碼。當拋出異常時,在下一次迭代中它不允許用戶輸入數據,它總是進入catch塊並打印文本。掃描儀在異常後不會讀取用戶輸入

public class Main { 
    public static void main(String[] args) { 
     Scanner inputScanner = new Scanner(System.in); 
     boolean correctInput = false; 
     do { 
      try { 
       int readInt = inputScanner.nextInt(); 
       correctInput = true; 
      } catch (InputMismatchException e) { 
       correctInput = false; 
       System.out.println("Please enter int value"); 
      } 
     } while (!correctInput); 

    } 
} 
+1

不要爲控制代碼的流程使用異常。代替使用'while(!scanner.hasNextInt())''。 – 2014-09-10 12:03:24

回答

2

nextInt犯規消耗非整數值所以一旦發生異常任何這樣的輸入將被傳遞循環往復到異常塊。因此,你需要消耗該值

} catch (InputMismatchException e) { 
     System.err.println("Invalid integer: " + inputScanner.nextLine()); 
     ... 
} 

或更好的只是使用hasNextInt

while (inputScanner.hasNextInt()) { 
    ... // no boolean flag needed 
} 
0
} catch (InputMismatchException e) { 
      correctInput = false; 
      System.out.println("Please enter int value"); 
      inputScanner.next(); 
    } 

消耗一個令牌,並繼續