天天看點

關于Scanner類寫在循環外面抛出異常後會無限循環的問題

Scanner sc = new Scanner(system.in);
while(true){
try{
a=sc.nextInt();
system.out.println(a);
}
catch(InputMismatchException e){
system.out.println("輸入異常");
}
}
           

如果我輸入一個字母a後,它就會進入無限循環,輸出"輸入異常"。

當某一掃描器抛出 InputMismatchException 時,該掃描器不會傳遞導緻該異常的标記,是以可以通過其他某種方法來擷取或跳過它。

這是java API文檔中的原話。意思是說,如果nextInt方法沒有成功解析出一個整數,那麼你的輸入不會被忽略。因為它或許能被其它格式解析。

那麼你的程式中輸入了a後,出現異常,number被指派100,開始下一次循環,但這時資料緩沖區内你上次輸入的a還在,并沒有清除,這時繼續解析a,還是錯誤,于是這個過程就一直重複下去了。

要改的是,出現錯誤把這次的輸入清除,隻要在catch中,加一句:input.next()就搞定了!也可以将Scanner寫在try裡面。

while(true){
try{
Scanner sc = new Scanner(system.in);
a=sc.nextInt();
system.out.println(a);
}
catch(InputMismatchException e){
system.out.println("輸入異常");
}
}</span>
           

繼續閱讀