全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3017
推到 Plurk!
推到 Facebook!

例外處理的問題編譯不過,到底哪裡錯

尚未結案
Frances3399
一般會員


發表:13
回覆:16
積分:5
註冊:2003-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-18 21:37:08 IP:163.18.xxx.xxx 未訂閱
程式碼:
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-18 23:07:21 IP:61.56.xxx.xxx 未訂閱
既然你的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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-19 17:00:27 IP:163.18.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-19 22:23:52 IP:61.56.xxx.xxx 未訂閱
引言: 感謝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(); 可行嗎? 麻煩大大了。
一: 你的"finally{....}"後多出了一個"}"了,所以compiler不知道class的範圍界限了.(注意好排縮就不會有這樣的問題發生了) 二: 自行定義exception,當然可以啊
//在另一個套件內定義你的例外類別
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-20 11:40:25 IP:163.18.xxx.xxx 未訂閱
都是錯這種小錯誤,感謝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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-20 12:46:54 IP:220.130.xxx.xxx 未訂閱
引言: 都是錯這種小錯誤,感謝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);
        }
}
既然你都已經把exception catch到了.那就不用宣告要丟出exception了嘛 public long getFac (long n) throws Exception {.... 改為 public long getFac (long n) {.... 發表人 - neoart 於 2005/06/20 12:49:29
系統時間:2024-04-28 20:34:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!