这就是我所拥有的:
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识别为包含除了四个允许字符以外的其他字符?
感谢。
答案 0 :(得分:4)
assert
子句引发AssertionError
延长Throwable
但不Exception
。因此,您的catch (Exception e)
被跳过了。但是,不要试图抓住AssertionError
或Throwable
。
必须使用-ea
明确启用断言。不要依赖它们的存在,否则你的程序将根据你无法控制的JVM参数表现不同。
最后不要使用您希望发生某些事情的例外情况(控制程序流程)。
而是试试这个:
private static boolean validChars(String dna) {
for (char c: dna.toCharArray()) {
if((c != 'C') && (c != 'G') && (c != 'T') && (c != 'A')) {
return false;
}
}
return true;
}
答案 1 :(得分:1)
assert
抛出AssertionError
,它不是Exception
的子类,而是Error
的子类。
答案 2 :(得分:0)
Assert会抛出一个错误,这不是异常!
试试这个:
...
catch (Throwable e)
或仅捕获断言失败:
catch (AssertionError e)