亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有一個自己寫代碼時的問題

while (true) {

try {

player1.ID = console.nextInt();

} catch (Exception e) {

System.out.println("請輸入數字ID!");

continue;

// TODO: handle exception

}

break;

}

這里定義的player1.ID是int型的,希望達到的效果是輸入非數字型時提示用戶“請輸入數字ID”,通過continue進行下一輪循環以便重新輸入,可是這個代碼當我輸入非數字時,程序不斷的循環打出“請輸入數字ID”,無限循環,直接跳過 了輸入步驟,這是為什么呢?

正在回答

3 回答

0.0,,這就不是回復樓了吧?? 233333

0 回復 有任何疑惑可以回復我~
#1

Edward_Xie 提問者

哈哈,非常感謝!
2016-08-11 回復 有任何疑惑可以回復我~

用Scanner接收鍵盤輸入的值,如果發生異常會一直返回這個異常值,這里要用String接收然后轉成int.

try {

String str = console.next();

int id = Integer.parseInt(str);

} catch (Exception e) {

System.out.println("請輸入數字ID!");

continue;

}


0 回復 有任何疑惑可以回復我~
#1

Edward_Xie 提問者

謝謝,用你的方法問題解決了。 還有些問題想和你討論下,為什么scanner會一直返回異常值?我自己查的另一種代碼也成功實現了,我原來的代碼的console是在類的構造方法中初始化的, 這段代碼主要就是每次輸入都先console=new Scanner(System.in);然后就不會自己一直無腦循環了,是不是因為出現異常后異常值會保存在console中?然后每次都開辟新的空間給console,就可以相應的避免上一次的異常值?
2016-08-11 回復 有任何疑惑可以回復我~
#2

Edward_Xie 提問者 回復 染紅_街道

非常感謝!全弄懂了!不過回復樓要怎么采納。。
2016-08-11 回復 有任何疑惑可以回復我~

因為try是執行一個方法,catch只是捕獲異常,不要用coutinue,要實現你的功能,你可以在catch塊里加一個if判斷,然后直接拋出一個異常,然后用finally來處理。代碼修改如下:

public ?void 類(){

try {

int player1.ID = console.nextInt();

if(//你自己實現判斷,輸入的不是數字){

Exception e=new Exception();

throw e;

}

} catch (Exception e) {

System.out.println("請輸入數字ID!");


}finally{

類 ?對象名 =new 類(); ? //在本類中創建一個對象

對象名.類();

}


}


0 回復 有任何疑惑可以回復我~
#1

小黃弟弟斗魚710373直播lol

如果你繼續要用while循環,你也可以再用一個finally塊,試試把coutinue放在finally塊里
2016-08-10 回復 有任何疑惑可以回復我~
#2

Edward_Xie 提問者 回復 小黃弟弟斗魚710373直播lol

不行,我的關鍵就在于我要使用while循環直到輸入正確,finally里的東西一定會執行,continue放進去就會無限循環了,break變成不可達
2016-08-11 回復 有任何疑惑可以回復我~
#3

染紅_街道 回復 Edward_Xie 提問者

catch語句塊跳回循環之前加一句 next(); 把儲存在緩沖區的非數字數據給清除掉,然后就可以了 你試試
2016-08-11 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有一個自己寫代碼時的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號