3

当我说:

final static char [] BASES = new char[]{'A', 'T', 'C', 'G'};
.
.
       char c= in.charAt(i);
            switch(c){
                case BASES[0] : break;
                case BASES[1] : packed =(char) (packed | 1); break;
                .
                .
                .
            }

但如果我说:

final static char a ='A';
final static char t ='T';
         switch(c){
                case a : break;
                ...

快乐吗?我觉得我在这里很厚。:-/

4

1 回答 1

4

a 的参数case必须是常量,即原始/字符串常量或文字或枚举常量。你的数组是不变的,但不是它的内容......

在您的情况下,将指示一个枚举,下面的代码是您如何编写它的示例。它将所有与基础链接的逻辑放在枚举中,您现在可以在需要的地方重用这些逻辑 - 您也可以添加方法。主要代码现在干净且易于阅读。

主要代码:

public static void main(String[] args) {
    String input = "ATC";
    char packed = 0;
    for (char c : input.toCharArray()) {
        Base base = Base.valueOf(String.valueOf(c));
        packed = base.getPacked(packed);
    }
}

你的枚举看起来像:

public enum Base {

    A {
        public char getPacked(char packed) {
            return packed;
        }
    }, T {
        public char getPacked(char packed) {
            return (char) (packed | 1);
        }
    }, C {
        public char getPacked(char packed) {
            return packed;
        }
    }, G {
        public char getPacked(char packed) {
            return packed;
        }
    };

    public abstract char getPacked(char packed);
}
于 2012-11-15T22:35:37.283 回答