例外處理的問題編譯不過,到底哪裡錯 |
尚未結案
|
Frances3399
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-27 發送簡訊給我 |
程式碼:
import java.io.*; import javax.swing.*; class Factorial{ long result = 0; public long getFac (long n) throws Exception { if (n == 0){ result = 1; }else if(n > 20 || n < 0){ throw new IllegalArgumentException(); }else{ result = n * getFac(n-1); } return result; } } class testException{ public static void main(String[] args){ try{ long n = Long.parseLong(JOptionPane.showInputDialog("Insert a number please:")); Factorial myFun = new Factorial(); System.out.println("Fac (" + n + ")= " + myFun.getFac(n)); }catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }finally{ System.out.println("Thank you Test !!"); } System.exit(0); } }執行結果: 為什麼會發生錯誤阿,不懂,我沒打錯字阿,而且不知道該如何修正, 看過這種錯誤,是哪裡錯誤啊? 希望會的大大指導一下,謝謝阿。 |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
既然你的myFun宣告是會丟出其他(未定)例外
那你的catch也要捕捉這種未定型態的例外
}catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }catch(Exception exp){ System.out.priintln("恭喜,你把我打敗了"); }finally{ System.out.println("Thank you Test !!"); } |
Frances3399
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-27 發送簡訊給我 |
感謝neoart大大的指導,原來是忘了打那個 XD
再請教neoart大兩個問題
import java.io.*; import javax.swing.*; class Factorial{ long result = 0; public long getFac (long n) throws Exception { try{ if (n == 0){ result = 1; }else if(n >= 0 && n <= 20){ result = n * getFac(n-1); }else{ throw new IllegalArgumentException(); } return result; }catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }catch(Exception e1){ System.out.println("你必須輸入大於0且小於20的常數"); }finally{ System.out.println("Thank you Test !!"); } } } } class testException{ public static void main(String[] args){ long n = Long.parseLong(JOptionPane.showInputDialog("Insert a number please:")); Factorial myFun = new Factorial(); System.out.println("Fac (" n ")= " myFun.getFac(n)); System.exit(0); } }為什麼會出現這個錯誤呢?, testException.java:27: 'class' or 'interface' expected } ^ 1 error是因為try catch 不能跟throws 共存嗎? 謝謝neoart大大了,小弟正在努力學習意外處理, 這個程式會這樣寫是想把錯誤個別處理, 另外一個問題是 exception可以自己定義嗎? 也就是 throws newException and throw new newException(); 可行嗎? 麻煩大大了。 |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言: 感謝neoart大大的指導,原來是忘了打那個 XD 再請教neoart大兩個問題一: 你的"finally{....}"後多出了一個"}"了,所以compiler不知道class的範圍界限了.(注意好排縮就不會有這樣的問題發生了) 二: 自行定義exception,當然可以啊import java.io.*; import javax.swing.*; class Factorial{ long result = 0; public long getFac (long n) throws Exception { try{ if (n == 0){ result = 1; }else if(n >= 0 && n <= 20){ result = n * getFac(n-1); }else{ throw new IllegalArgumentException(); } return result; }catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }catch(Exception e1){ System.out.println("你必須輸入大於0且小於20的常數"); }finally{ System.out.println("Thank you Test !!"); } } } } class testException{ public static void main(String[] args){ long n = Long.parseLong(JOptionPane.showInputDialog("Insert a number please:")); Factorial myFun = new Factorial(); System.out.println("Fac (" n ")= " myFun.getFac(n)); System.exit(0); } }為什麼會出現這個錯誤呢?,testException.java:27: 'class' or 'interface' expected } ^ 1 error是因為try catch 不能跟throws 共存嗎? 謝謝neoart大大了,小弟正在努力學習意外處理, 這個程式會這樣寫是想把錯誤個別處理, 另外一個問題是 exception可以自己定義嗎? 也就是 throws newException and throw new newException(); 可行嗎? 麻煩大大了。 //在另一個套件內定義你的例外類別 Class MyException extends Exception{ MyException(String msg){ super(msg); } } ..... ... //例外類別使用 Class ExpUseClass{ ... ... void doProc(String arg)throws MyException{ ... ... if(!result)throws new MyException(arg); ... ... } public int main(){ ExpUseClass uC=new ExpUseClass(); try{ ... uC.dProc(); ... }catch(MyException expOfMine){ expOfMine.printStackTrace(); ....//如果可以的話,把expOfMine.printStackTrace()也寫到log }finally{ //擦一咧啊"腳撐" } } }發表人 - neoart 於 2005/06/19 22:32:57 |
Frances3399
一般會員 發表:13 回覆:16 積分:5 註冊:2003-10-27 發送簡訊給我 |
都是錯這種小錯誤,感謝neoart大的不厭其煩阿。 不過小弟把"{" 刪去後 出現
testException.java:32: unreported exception java.lang.Exception; must be caught or declared to be thrown System.out.println("Fac (" n ")= " myFun.getFac(n)); ^ 1 error這..這次又是什麼原因 XD 是因為錯誤,回傳有問題嗎? 可是他說 必須被捉住或被宣稱被投擲 好怪,難道真的不能共存~~ 想說寫一個function 錯誤都自己解決 然後一樣會回傳一個共定值(ex: 0 or false) 告知user or proc 出錯 import java.io.*; import javax.swing.*; class Factorial{ long result = 0; public long getFac (long n) throws Exception { try{ if (n == 0){ result = 1; }else if(n >= 0 && n <= 20){ result = n * getFac(n-1); }else{ throw new IllegalArgumentException(); } return result; }catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }catch(Exception e1){ System.out.println("Error is " e1); }finally{ System.out.println("Thank you Test !!"); return result; } } } class testException{ public static void main(String[] args){ long n = Long.parseLong(JOptionPane.showInputDialog("Insert a number please:")); Factorial myFun = new Factorial(); System.out.println("Fac (" n ")= " myFun.getFac(n)); System.exit(0); } } |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言: 都是錯這種小錯誤,感謝neoart大的不厭其煩阿。 不過小弟把"{" 刪去後 出現既然你都已經把exception catch到了.那就不用宣告要丟出exception了嘛 public long getFac (long n) throws Exception {.... 改為 public long getFac (long n) {.... 發表人 - neoart 於 2005/06/20 12:49:29testException.java:32: unreported exception java.lang.Exception; must be caught or declared to be thrown System.out.println("Fac (" n ")= " myFun.getFac(n)); ^ 1 error這..這次又是什麼原因 XD 是因為錯誤,回傳有問題嗎? 可是他說 必須被捉住或被宣稱被投擲 好怪,難道真的不能共存~~ 想說寫一個function 錯誤都自己解決 然後一樣會回傳一個共定值(ex: 0 or false) 告知user or proc 出錯import java.io.*; import javax.swing.*; class Factorial{ long result = 0; public long getFac (long n) throws Exception { try{ if (n == 0){ result = 1; }else if(n >= 0 && n <= 20){ result = n * getFac(n-1); }else{ throw new IllegalArgumentException(); } return result; }catch(NumberFormatException ne){ System.out.println("你必須輸入正確的常數格式"); }catch(IllegalArgumentException ie){ System.out.println("你必須輸入大於0且小於20的常數"); }catch(Exception e1){ System.out.println("Error is " e1); }finally{ System.out.println("Thank you Test !!"); return result; } } } class testException{ public static void main(String[] args){ long n = Long.parseLong(JOptionPane.showInputDialog("Insert a number please:")); Factorial myFun = new Factorial(); System.out.println("Fac (" n ")= " myFun.getFac(n)); System.exit(0); } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |