2013-02-17 27 views
0

這是我有:Java代碼沒有捕獲錯誤? (初學者)

public class A1tester { 
    static String dna = "GCTTTA"; 
    static String dna1 = "GCTAAAAAD"; 

    public static void main(String[] args) { 
     validChars(dna); 
     validChars(dna1); 
    } 

    private static boolean validChars(String dna) { 
     try { 
      for (char c: dna.toCharArray()) { 
       assert ((c == 'C') || (c == 'G') || (c == 'T') || (c == 'A')); 
      } 
     } catch (Exception e) { 
      System.out.println("Exception caught!"); 
      return false; 
     } 

     System.out.println("DNA has only the permitted letters"); 
     return true; 
    } 

} 

我缺少的是這是我的預防validChars()方法識別DNA1作爲比四點允許的字符包含其他?

謝謝。

+2

http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#enable-disable – 2013-02-17 22:59:01

+0

會發生什麼事,當你運行你的代碼? – 2013-02-17 22:59:29

+0

請注意,'assert'是開發人員用來作爲調試工具的。它不應該被用作執行控制。我強烈建議您改用'if'語句。 – 2013-02-17 23:00:29

回答

4
  1. assert子句拋出AssertionError延伸Throwable但不Exception。所以你的catch (Exception e)被跳過。不過,請不要試圖捕獲AssertionErrorThrowable

  2. 斷言必須與-ea明確啓用。不要依賴它們的存在,否則你的程序會根據你無法控制的JVM參數而有不同的表現。

  3. 最後不要用,你希望一些事情發生異常(控制程序流程)。

相反試試這個:

private static boolean validChars(String dna) { 
    for (char c: dna.toCharArray()) { 
     if((c != 'C') && (c != 'G') && (c != 'T') && (c != 'A')) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

謝謝。如果布爾變量爲假,我怎麼能拋出一個自定義的異常(我創建的)?沒有看到如何使用常規的try/catch塊來做到這一點。 – entrepaul 2013-02-17 23:20:59

+0

異常不用於控制流。你使用'if'語句,並在這種情況下返回。 – Femaref 2013-02-17 23:32:12

0

斷言拋出一個錯誤,這是不是一個例外!

試試這個:

... 
catch (Throwable e) 

或只捕獲斷言失敗:

catch (AssertionError e)