I have a piece of code which looks something like this:
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//
}
Above code is fulfilling my requirements but I want to change it to some more readable code using anything like switch block etc. I know how switch works but I'm not sure how to covert my existing code.
Just for readability, here is a cleaned-up version (A
is PEN
, B
is ACT
, C
is SUS
and D
is 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.
A mixing of AND
and OR
conditional statement cannot be replaced by a single switch case.
You could use embedded switch cases (an outer to handle cStatus
and an inner to handle nStatus
) but it will really not give a readable code :
boolean isEnabled = true;
switch (cStatus) {
case PEN:
switch (nStatus) {
case ACT:
case SUS:
case PEN_CAN:
isEnabled = false;
}
break;
case ACT:
switch (cStatus) {
...
}
break;
}
But you could make your code more readable by eliminating the duplication and by grouping conditional statements with the same cStatus
value for example.
You could also use the List.contains()
method to check the nStatus
value associated to the cStatus
value.
Here is a snippet :
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))
...
}