gpt4 book ai didi

java - switch 语句中使用的 char 数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:12 24 4
gpt4 key购买 nike

为什么我的编译器会生气(需要常量表达式)当我说:

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;
...

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

最佳答案

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

关于java - switch 语句中使用的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com