当我说:
时,为什么我的编译器会生气(需要使用常量表达式)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;
...
很开心? 我觉得我在这里很厚。 : - /
答案 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);
}