blackbamboo
2016-06-01 22:16:05
public?class?ExceptionDemo{
????public?static?void?main(String[]?args){
????????Scanner?input=new?Scanner(System.in);
????????int?temp=0;
????????int?i=0;
????????//輸入一個數(shù),大于零時重新輸入,小于零跳出,輸入出現(xiàn)異常時,
????????//重新輸入,并打印警告,但是出現(xiàn)異常時卻一直陷入死循環(huán)。
????????while(true){
????????????System.out.println(i++);
????????????System.out.print("請輸入一個不大于10的數(shù)字:");
????????????try?{
????????????????temp=input.nextInt();
????????????}?catch?(Exception?e)?{
????????????????System.err.println("請按要求輸入!");
????????????????continue;
????????????}
????????????if(temp>9){
????????????????System.err.println("請按要求輸入!");
????????????????continue;
????????????}else{
????????????????break;
????????????}
????????}
????}
}
11 回答
已采納

為誰風(fēng)露_立中宵
TA貢獻(xiàn)1條經(jīng)驗 獲得超2個贊
scanner在要求用戶輸入的時候,其實是在內(nèi)存中保存了用戶輸入,輸入字母等就會存入該段內(nèi)存。當(dāng)我們用input.nextInt()調(diào)用時,就不能調(diào)用出來,因為它不是我們要調(diào)用的int類型,這時就會報輸入不匹配錯誤??墒菃栴}就在這兒,我們用input.nextInt()調(diào)用沒把該段內(nèi)存中的東西提出來,他就會一直占用這段內(nèi)存,導(dǎo)致我們二次輸入時,就不會再要求用戶輸入了,他會繼續(xù)試圖調(diào)用該段內(nèi)存數(shù)值。
???所以解決辦法就是我們清空該段內(nèi)存,或者把該段內(nèi)存中的數(shù)值取出。所以我們在catch塊中使用 input.next(); 就可以解決。因為input.next()是得到字符串所以可以把該段內(nèi)存中的值取出。因此最終可通過如下方式解決
????try?{ ????????????????temp=input.nextInt(); ????????????}?catch?(Exception?e)?{ ???????????? input.next(); ????????????????System.err.println("請按要求輸入!"); ????????????????continue; ????????????}
其余的不變!

慕粉3248975
TA貢獻(xiàn)8條經(jīng)驗 獲得超8個贊
出現(xiàn)異常時,不應(yīng)該用continue,用break就可以跳出循環(huán)了,continue是進(jìn)入下一次循環(huán)
同時你這段程序的代碼邏輯有問題
添加回答
舉報
0/150
提交
取消