Как я могу использовать коммутатор, который имеет дело, которое делает все дела раньше - PullRequest
0 голосов
/ 13 апреля 2019

Итак, я делаю простое меню в основном классе, где есть 10 опций от 0 до 9, я использую регистр переключателя, чтобы получить опцию и затем выполнить определенный код, а цифра 9 - сделать все опции вменю.Как это может быть, если опция имеет значение 9, она выполняет все случаи раньше.

public static void main(String[] args) {
    switch (option) {
        case 1:
            do A;
            break;
        case 2:
            do B;
            break;
        case 3:
            do C;
            break;
        case 4:
            do C;
            break;
        case 5:
            do C;
            break;
        case 6:
            do C;
            break;
        case 9:
            do case 1 ;
            do case 2 ;
            do case 3 ;
            do case 4 ;
            do case 5 ;
            do case 6 ;
    }
}

Я ожидаю, что когда опция имеет значение 9, она выполняет все случаи раньше;

Ответы [ 2 ]

2 голосов
/ 14 апреля 2019

Существуют различные способы достижения того, что вам нужно.Я обрисую несколько.

Методы использования

Это просто, несколько чисто и легко поддерживать.Все, что вам нужно сделать, это обернуть код, который вы хотели бы выполнить в каждом случае, в отдельный метод, а затем вызвать эти методы из коммутатора.Это как раз то, для чего нужны функции.

switch(option){
    case 1:
        doA();
        break;
    case 2:
        doB();
        break;
    ...
    // other cases
    ...
    case 9:
        doA();
        doB();
        ...
        // other method calls
        ...
        break;
}

Переключение на if операторы

Это довольно очевидно, просто проверьте, является ли опция каждым отдельным случаемили вариант 9.

if(option == 1 || option == 9){
    do A;
}
if(option == 2 || option == 9){
    do B;
}
...
// other cases
...

(Mis) use break s

Это довольно уродливо, и я бы не рекомендовал это, но это действительно личное делопредпочтение (и насколько легко читать и поддерживать, вы хотите, чтобы код был в будущем).

Если option равно 9, тогда мы устанавливаем флаг, чтобы отключить все разрывы в операторе switch.Это эффективно заставляет все остальные случаи ниже этого просто выполнять линейно (поскольку разрывы, чтобы оставить выключатель, отключены).

boolean isCase9 = false;
switch(option){
    case 9:
        isCase9 = true;
    case 1:
        doA();
        if(!isCase9){
            break;
        }
    case 2:
        doB();
        if(!isCase9){
            break;
        }
    ...
    // other cases
    ...
0 голосов
/ 14 апреля 2019

Я предлагаю определить метод (давайте назовем его switchMethod) с помощью switch case - когда все опции только от 0 до 8.

public void switchMethod(option) {
   switch (option) {
   case 1:
       do A;
       break;
   case 2:
      do B;
      break;
   case 3:
      do C;
      break;
   ....
   case 8:
      do X;
      break;
  }
}

В main:

if (option < 9) {
    switchMethod(option)
} else {
   for (int i = 0; i <9; i++)
       switchMethod(i)
}

Таким образом, вы не будете писать повторяющийся код, и он будет выполнять запрошенную вами логику.

Другой способ заключается в создании дублирующего кода, подобного этому:

switch (option) {
    case 1:
        do A;
        break;
    case 2:
        do B;
        break;
    case 3:
        do C;
        break;
    case 4:
        do C;
        break;
    case 5:
        do C;
        break;
    case 6:
        do C;
        break;
    case 9:
        do A;
        do B;
        do C;
        ....
        break;
}
...