討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 政府補助!學嵌入式+物聯網 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
Scanner讀到輸入不符合的例外處理?
更改我的閱讀文章字型大小
作者 : joe8099x()
[ 貼文 13 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/25 下午 05:40:09
各位先進好,我想要一直輸入數字,但輸入到文字時會發生例外, 請問要如何寫,抓到例外後sc就不知道要怎麼恢復,
部分程式如下
輸入非int時會一直重覆上一個所輸入的數值,跑不完.
謝謝各位,
     Scanner sc=new Scanner(System.in);
Integer money=new Integer(0);
do{
try{
money=sc.nextInt();
}
catch(InputMismatchException e){
System.out.println("!!請輸入數值!!");

}
finally{

}
System.out.println("金額:"+money);
}while(true);
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/25 下午 07:43:02
you may justify kind of exceptions , and re-throw an exception .
http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html

see this for coding , more google , more fun
作者 : joe8099x(joe8099x)
[ 貼文 13 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/25 下午 09:01:15
謝謝您的回答,剛學不久,資質不好,看不太懂您給連結的內容,不過還是謝謝您
我努力再看了書,再查了網路
我把程式改成

Integer money=new Integer(0);
do{
try{
Scanner sc=new Scanner(System.in);
money=sc.nextInt();
System.out.println("金額:"+money);
}
catch(InputMismatchException e){
System.out.println("!!請輸入數值!!");
}
finally{
}
}while(true);
就可以了,可是覺得怪怪的,如果我輸入了100筆數字,是否就會有100個sc被new出來,99個被拋棄,這樣寫會不會有問題?
謝謝.
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/25 下午 10:04:46
In fact , you should handle exception as following steps
1. Catch the kind of exception
that means you must get the exception's kind
http://mis.hwai.edu.tw/~kevin/MISProject/JAVAProject/chapter9/c9-1.htm
http://mis.hwai.edu.tw/~kevin/MISProject/JAVAProject/chapter9/c9-2.htm
http://mis.hwai.edu.tw/~kevin/MISProject/JAVAProject/chapter9/c9-3.htm
http://mis.hwai.edu.tw/~kevin/MISProject/JAVAProject/chapter9/c9-4.htm ----> how to customize an exception . maybe you need to do it !
2. handle it - finally block is to provide a mechanism that can handle those exceptions .
http://dns2.asia.edu.tw/~wzyang/slides/Java/Chen/SE7ch10.pdf there are some exceptions handling mechanisms .
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人joe8099x註記此篇回應為最佳解答 2014/3/25 下午 10:58:16
>各位先進好,我想要一直輸入數字,但輸入到文字時會發生例外, 請問要如何寫,抓到例外後sc就不知道要怎麼恢復,

如果輸入不是數字, 就用 Scanner 的 next() 去把它「吃」掉:
  java.util.Scanner sc = new java.util.Scanner(System.in);
  Integer money = new Integer(0);
  do {
    try {
      money = sc.nextInt();
    } catch(java.util.InputMismatchException e) {
      sc.next(); // **** 加這個
      System.out.println("!!請輸入數值!!");
    } finally {
    }
    System.out.println("金額:"+money);
  } while(true);

另一個方法是先用 Scanner 成員 hasNextInt() 來測試下一個欲讀取的資料是否 int. 是的話才讀取, 不是的話照樣用 next() 把它「吃」掉.
作者 : joe8099x(joe8099x)
[ 貼文 13 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/26 上午 05:51:36
謝謝兩位前輩的耐心指導,我會再好好的參透try...catch用法和Scanner這物件的方法?感恩哩
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人joe8099x註記此篇回應為最佳解答 2014/3/26 上午 07:07:42
http://stackoverflow.com/questions/2696063/java-util-scanner-error-handeling
a discussion about scanner.nextint
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人joe8099x註記此篇回應為最佳解答 2014/3/26 上午 07:13:57
or this discussion - http://stackoverflow.com/questions/16816250/java-inputmismatchexception
作者 : joe8099x(joe8099x)
[ 貼文 13 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/27 下午 08:30:04
謝謝您花時間找到這兩個連結給我,
您提供的這個連結的網站實在太棒了http://stackoverflow.com/
上面有很多問題都是初學者(就是我)容易犯的問題
雖然是英文看得很吃力
不過如獲至寶喔!
感恩感恩.....
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/3/27 下午 09:03:36
English reading capability is very important. it can help you get many information .
 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 570 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625