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文字以外の文字を含むものとして識別できないようにするために何が欠けていますか?

ありがとう。

4

3 に答える 3

4
  1. assert句はAssertionError拡張をスローしますが、 はスローしThrowableませんException。だからあなたcatch (Exception e)はスキップされます。AssertionErrorただし、またはThrowable代わりにキャッチしようとしないでください。

  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

assertAssertionErrorのサブクラスではなく、 のサブクラスでExceptionあるthrows Error

于 2013-02-17T23:00:23.330 に答える
0

Assert はエラーをスローしますが、これは例外ではありません!

これを試して:

...
catch (Throwable e)

または、アサーションの失敗のみをキャッチするには:

catch (AssertionError e)
于 2013-02-17T23:00:14.307 に答える