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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java小白,為什么這里會陷入死循環?!

java小白,為什么這里會陷入死循環?!

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; ????????//輸入一個數,大于零時重新輸入,小于零跳出,輸入出現異常時, ????????//重新輸入,并打印警告,但是出現異常時卻一直陷入死循環。 ????????while(true){ ????????????System.out.println(i++); ????????????System.out.print("請輸入一個不大于10的數字:"); ????????????try?{ ????????????????temp=input.nextInt(); ????????????}?catch?(Exception?e)?{ ????????????????System.err.println("請按要求輸入!"); ????????????????continue; ????????????} ????????????if(temp>9){ ????????????????System.err.println("請按要求輸入!"); ????????????????continue; ????????????}else{ ????????????????break; ????????????} ????????} ????} }
查看完整描述

11 回答

已采納
?
為誰風露_立中宵

TA貢獻1條經驗 獲得超2個贊

scanner在要求用戶輸入的時候,其實是在內存中保存了用戶輸入,輸入字母等就會存入該段內存。當我們用input.nextInt()調用時,就不能調用出來,因為它不是我們要調用的int類型,這時就會報輸入不匹配錯誤??墒菃栴}就在這兒,我們用input.nextInt()調用沒把該段內存中的東西提出來,他就會一直占用這段內存,導致我們二次輸入時,就不會再要求用戶輸入了,他會繼續試圖調用該段內存數值。

???所以解決辦法就是我們清空該段內存,或者把該段內存中的數值取出。所以我們在catch塊中使用 input.next(); 就可以解決。因為input.next()是得到字符串所以可以把該段內存中的值取出。因此最終可通過如下方式解決

????try?{
	????????????????temp=input.nextInt();
	????????????}?catch?(Exception?e)?{
	????????????	input.next();
	????????????????System.err.println("請按要求輸入!");
	????????????????continue;
	????????????}

其余的不變!

查看完整回答
2 反對 回復 2016-06-02
?
kstg5944571

TA貢獻18條經驗 獲得超16個贊

while(true)···這是恒成立的,當然一直死循環啦,改成temp>=0試試

查看完整回答
1 反對 回復 2016-06-01
?
不偏不易

TA貢獻96條經驗 獲得超118個贊

要學會Debug

設置斷點,并Debug.

一步一步走下去,觀察變量。然后就能發現錯誤。

查看完整回答
2 反對 回復 2016-06-01
  • 252545109
    252545109
    是的,java開發必須要會用debug這是一個專業java程序員必須要有的素質!
  • blackbamboo
    blackbamboo
    就是不會啊,剛學java。
  • 晉強
    晉強
    都死循環了 在設置斷點 死完了。。哈哈
?
晉強

TA貢獻4條經驗 獲得超1個贊

在捕獲異常中 把continue改為break

查看完整回答
反對 回復 2016-06-02
  • blackbamboo
    blackbamboo
    我要輸錯重新輸入啊?。?/div>
  • 晉強
    晉強
    你到底需要什么結果呢 要重輸入就把scanner寫入while里邊呀
?
blackbamboo

TA貢獻1條經驗 獲得超0個贊

我是想在里面的代碼中跳出,現在的情況是,一但有異常,就一直循環,不會給我輸入的機會。

查看完整回答
反對 回復 2016-06-02
  • blackbamboo
    blackbamboo
    用try...catch是想如果輸入數字以外的字符的話程序會終會,如果出現異常就提示一下,然后再從新輸入。
?
慕粉3248975

TA貢獻8條經驗 獲得超8個贊

出現異常時,不應該用continue,用break就可以跳出循環了,continue是進入下一次循環

同時你這段程序的代碼邏輯有問題

查看完整回答
反對 回復 2016-06-02
?
1255321142

TA貢獻2條經驗 獲得超0個贊

你的代碼編譯都不通過吧!return后面還有代碼?

http://img1.sycdn.imooc.com//574f91f900019cf703170105.jpg


查看完整回答
反對 回復 2016-06-02
  • blackbamboo
    blackbamboo
    粘貼復制時出錯
  • 司風
    司風
    int i=0; while(true){ i++; if(i>5){break;} } //你說這個是死循環嗎?
?
慕用9836023

TA貢獻1條經驗 獲得超0個贊

while (true){}注定是一個死循環


查看完整回答
反對 回復 2016-06-02
  • 11 回答
  • 1 關注
  • 2854 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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