gpt4 book ai didi

java - 如何将由多个AND、OR组成的If语句转换为switch语句?

转载 作者:行者123 更新时间:2023-11-30 06:05:24 25 4
gpt4 key购买 nike

我有一段代码,看起来像这样:

     String cStatus = getStatus_c();
String nStatus = getStatus_n();

if (!((cStatus.equals(PEN) && nStatus.equals(ACT))
|| (cStatus.equals(PEN) && nStatus.equals(SUS))
|| (cStatus.equals(PEN) && nStatus.equals(PEN_CAN))
|| (cStatus.equals(ACT) && nStatus.equals(SUS))
|| (cStatus.equals(ACT) && nStatus.equals(PEN_CAN))
|| (cStatus.equals(SUS) && nStatus.equals(ACT))
|| (cStatus.equals(SUS) && nStatus.equals(PEN_CAN))
|| (cStatus.equals(PEN_CAN) && nStatus.equals(ACT))
|| (cStatus.equals(PEN_CAN) && nStatus.equals(CAN))))
{
//Do someting//
}

上面的代码满足我的要求,但我想使用 switch block 等将其更改为一些更具可读性的代码。我知道 switch 是如何工作的,但我不确定如何隐藏我现有的代码。


为了便于阅读,这里是一个清理版本(APENBACTCSUSDPEN_CAN):

if (! (    (cStat == A && nStat == B)
|| (cStat == A && nStat == C)
|| (cStat == A && nStat == D)
|| (cStat == B && nStat == C)
|| (cStat == B && nStat == D)
|| (cStat == C && nStat == B)
|| (cStat == C && nStat == D)
|| (cStat == D && nStat == B)
|| (cStat == D && nStat == D)
)
)

最佳答案

Above code is fulfilling my requirements but I want to change it to some more readable code using anything like switch block etc.

ANDOR 条件语句的混合不能用单个 switch case 替换。
您可以使用嵌入式开关盒(外部处理 cStatus 和内部处理 nStatus),但它实际上不会提供可读的代码:

boolean isEnabled = true;
switch (cStatus) {

case PEN:
switch (nStatus) {
case ACT:
case SUS:
case PEN_CAN:
isEnabled = false;
}
break;
case ACT:
switch (cStatus) {
...
}
break;
}

但是,您可以通过消除重复以及将具有相同 cStatus 值的条件语句分组来提高代码的可读性。
您还可以使用 List.contains() 方法检查与 cStatus 值关联的 nStatus 值。

这是一个片段:

List<String> nStatusValueForcStatutPen = Arrays.asList("ACT", "SUS", "PEN_CAN");
List<String> nStatusValueForcStatutAct = Arrays.asList("SUS", "PEN_CAN");
...
if (!((cStatus.equals(PEN) && nStatusValueForcStatutPen.contains(nStatus))
|| (cStatus.equals(ACT) && nStatusValueForcStatutAct.contains(nStatus))
...
}

关于java - 如何将由多个AND、OR组成的If语句转换为switch语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46621470/

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