0

这就是我所拥有的:

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 识别为包含四个允许的字符以外的字符?

谢谢。

4

3 回答 3

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;
}
于 2013-02-17T22:59:54.210 回答
1

assertthrowsAssertionError不是 的子类Exception,而是 的子类Error

于 2013-02-17T23:00:23.330 回答
0

断言抛出一个错误,这不是异常!

试试这个:

...
catch (Throwable e)

或仅捕获断言失败:

catch (AssertionError e)
于 2013-02-17T23:00:14.307 回答