Java在case语句中使用变量
所以,我知道不能在case语句中使用变量。我希望有人能给我指出一些代码,作为替代,这些代码会相当有效。例如,我可以做很多假设 情况是,我有一个对象数据数组,我想遍历该数组。数组中的位置由如下int…ordinal语句所示的名称给出。基本上,如果数组的某些成员是离散数据(如C_VENT_RATE),我必须为它们分配生成“结果”对象。我能很容易看出这一点的唯一方法是做一系列的if,比如if I.equalspr\u intJava在case语句中使用变量,java,Java,所以,我知道不能在case语句中使用变量。我希望有人能给我指出一些代码,作为替代,这些代码会相当有效。例如,我可以做很多假设 情况是,我有一个对象数据数组,我想遍历该数组。数组中的位置由如下int…ordinal语句所示的名称给出。基本上,如果数组的某些成员是离散数据(如C_VENT_RATE),我必须为它们分配生成“结果”对象。我能很容易看出这一点的唯一方法是做一系列的if,比如if I.equalspr\u int ArrayList<String[]> rawEKGs =
ArrayList<String[]> rawEKGs = ekgFile.getForMrno( docInfo.getMedicalRecordNumber() );
for (String[] parts : rawEKGs) {
for (int i=0; i< parts.length; i++ )
{
Result result = docInfo.getResult();
boolean process = true;
final int vent_rate = UncEKG.COL_NAMES.C_VENT_RATE.ordinal();
int art_rate = UncEKG.COL_NAMES.C_ART_RATE.ordinal();
int pr_int = UncEKG.COL_NAMES.C_PR_INTERVAL.ordinal();
int qrs_dur = UncEKG.COL_NAMES.C_QRS_DURATION.ordinal();
int qt_qtc = UncEKG.COL_NAMES.C_QT_QTC.ordinal();
int prt = UncEKG.COL_NAMES.C_PRT_AXES.ordinal();
switch(i) {
case : // something
break;
default: process = false;
}
你喜欢这样吗
switch(i) {
case 0: // something
break;
case 1: // something
break;
case 2: // something
break;
.
.
.
.
default: process = false;
}
你喜欢这样吗
switch(i) {
case 0: // something
break;
case 1: // something
break;
case 2: // something
break;
.
.
.
.
default: process = false;
}
如果对象包含枚举作为变量,为什么不使用枚举上的开关呢
switch (theEnum) {
case UncEKG.COL_NAMES.C_VENT_RATE:
//something
break;
case UncEKG.COL_NAMES.C_PR_INTERVAL:
//something else
break;
default: process = false
}
如果对象包含枚举作为变量,为什么不使用枚举上的开关
switch (theEnum) {
case UncEKG.COL_NAMES.C_VENT_RATE:
//something
break;
case UncEKG.COL_NAMES.C_PR_INTERVAL:
//something else
break;
default: process = false
}
我认为正确的方法是将逻辑放入枚举中。因此,您可以向enum类添加一个静态方法,以获得基于int的正确列,然后您可以基于enum进行切换,或者执行其他操作,或者更好地在enum上有一个方法,该方法说明是否处理该列,尽管如果enum更通用,这可能不合适 尽管如此,快速和肮脏看起来是这样的:
ArrayList<String[]> rawEKGs = ekgFile.getForMrno( docInfo.getMedicalRecordNumber() );
UncEKG.COL_NAMES[] values = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
for (int i=0; i< parts.length; i++ )
{
Result result = docInfo.getResult();
boolean process = true;
switch (values[i]) {
case UncEKG.COL_NAMES.C_VENT_RATE:
break;
default: process = false;
}
}
}
我认为正确的方法是将逻辑放入枚举中。因此,您可以向enum类添加一个静态方法,以获得基于int的正确列,然后您可以基于enum进行切换,或者执行其他操作,或者更好地在enum上有一个方法,该方法说明是否处理该列,尽管如果enum更通用,这可能不合适 尽管如此,快速和肮脏看起来是这样的:
ArrayList<String[]> rawEKGs = ekgFile.getForMrno( docInfo.getMedicalRecordNumber() );
UncEKG.COL_NAMES[] values = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
for (int i=0; i< parts.length; i++ )
{
Result result = docInfo.getResult();
boolean process = true;
switch (values[i]) {
case UncEKG.COL_NAMES.C_VENT_RATE:
break;
default: process = false;
}
}
}
因为您已经有了一个枚举,所以可以使用将枚举映射到命令的枚举映射来尝试命令模式 每个命令实例的逻辑都与您的case语句相同
EnumMap<UncEKG.COL_NAMES, Command> map = ...
//values is in ordinal order
//pulled out for performance reasons
UncEKG.COL_NAMES[] names = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
for (int i=0; i< parts.length; i++ ){
map.get(names[i]).execute();
}
}
因为您已经有了一个枚举,所以可以使用将枚举映射到命令的枚举映射来尝试命令模式 每个命令实例的逻辑都与您的case语句相同
EnumMap<UncEKG.COL_NAMES, Command> map = ...
//values is in ordinal order
//pulled out for performance reasons
UncEKG.COL_NAMES[] names = UncEKG.COL_NAMES.values();
for (String[] parts : rawEKGs) {
for (int i=0; i< parts.length; i++ ){
map.get(names[i]).execute();
}
}
在Java语言的早期版本中,case语句上的值必须是文字/常量整数。我知道最近的版本放宽了限制,但我不知道细节。如果您知道可能的大小写值在几十个窄范围内,也许您可以使用映射数组在索引值和您定义的常量之间进行映射。不过,与仅使用if梯形图相比,不确定这是否值得付出努力。因此,您知道数组中数据的索引,必须从枚举的序数值进行处理?为什么不能通过该索引访问数据:stringdata=parts[i];doSomeThingWithDatadata。。。在Java语言的早期版本中,case语句上的值必须是一个文本/常量整数。我知道最近的版本放宽了限制,但我不知道细节。如果您知道可能的大小写值在几十个窄范围内,也许您可以使用映射数组在索引值和您定义的常量之间进行映射。不过,与仅使用if梯形图相比,不确定这是否值得付出努力。因此,您知道数组中数据的索引,必须从枚举的序数值进行处理?为什么不能通过该索引访问数据:stringdata=parts[i];doSomeThingWithDatadata。。。如果你发现了一个有趣的部分,就不要遍历整个数组并采取行动,问题是我们想要灵活,我没有解释。源文件是一个CSV文件,我们希望允许用户在列之间移动,因此如果他们这样做,这将失败。我没有说明的问题是,我们希望灵活。源文件是一个CSV文件,我们希望允许用户在列中移动,因此如果他们这样做,这将失败。这是完美的,正是我想要的。确认它有效。谢谢大家。这太完美了,正是我想要的。确认它有效。谢谢大家。