Я бы начал с разбиения вашего псевдо-переключателя на реальные переключатели:
switch(variable){
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add items to next 3 spots in array for all cases
}
switch(variable){
case 0:
case 1:
if(other factors)
//add item to next spot in array
case 2:
case 3://all cases
//add more items to next spot in array
}
switch(variable){
case 1:
case 2:
if(other factors2)
//add item to next spot in array
break;
case 3:
//add item to next spot in array
case 0:
}
switch(variable){
case 1:
case 2://all cases
//add items to next spot in array
break;
case 1:
case 2:
if(other factors2)
//add item to next spot in array
}
Это должно соответствовать вашим требованиям.
Затем я извлеку каждый блок переключателей в своем собственном методе, чтобы его было легче понять и прочитать.
Вы могли бы рассмотреть возможность извлечения всего этого в небольшую классовую иерархию:
class DefaultExecutor{
void do(){
step1();
step2();
step3();
step4();
}
void step1(){//all cases class of the first switch statement}
//... similar methods for the other switcht statements
}
class CaseZeor extends DefaultExecutor{
// override step1-4 as required for special treatment of case 0
}
// ... further classes for cases 1-3