switch语句中使用的char数组

时间:2012-11-15 22:31:39

标签: java expression constants java-7 primitive

当我说:

时,为什么我的编译器会生气(需要使用常量表达式)
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;
                ...

很开心? 我觉得我在这里很厚。 : - /

1 个答案:

答案 0 :(得分:4)

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);
}