作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一段代码,看起来像这样:
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 是如何工作的,但我不确定如何隐藏我现有的代码。
为了便于阅读,这里是一个清理版本(A
是 PEN
,B
是 ACT
,C
为 SUS
,D
为 PEN_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.
AND
和 OR
条件语句的混合不能用单个 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/
我是一名优秀的程序员,十分优秀!