3

これはよくある問題だと思いましたが、解決策が見つかりません。

次のような列挙型があります

public enum MyEnum { C, G, A, T, U }

次のように、ある列挙型インスタンスを別の列挙型インスタンスと比較する必要があります。

C 補数 G
G 補数 C
A 補数 T
T 補数 A
U 補数 T
T 補数 U

次のようなコードを書かずにどうやってそれを行うことができますか:

public boolean complements(MyEnum other) {
    if(this.compareTo(C) == 0) {
        if(other.compareTo(G) {
            return true;
        } else return false;
    }
    ...
}

前もって感謝します。

4

4 に答える 4

8

なぜcomplementsフィールドを持たないのですか?にすることができますEnumSet

enum MyEnum {
    G, C, A, T, U;

    static {
        C.complements = EnumSet.of(G);
        G.complements = EnumSet.of(C);
        A.complements = EnumSet.of(T);
        T.complements = EnumSet.of(A, U);
        U.complements = EnumSet.of(T);
    }

    private EnumSet<MyEnum> complements;

    public boolean complements(MyEnum other) {
        return complements.contains(other);
    }
}
于 2013-09-17T18:22:19.230 に答える
4

この場合の最も簡単な解決策は次のとおりです。

public boolean complements(MyEnum other) {
    switch (this) {
        case C:
            return other == G;
        case G:
            return other == C;
        case A:
        case U:
            return other == T;
        case T:
            return other == A || other == U;
        default:
            return false;
    }
}
于 2013-09-17T18:26:25.127 に答える