1. L'opérateur à choix multiples :switch

Java a un autre opérateur intéressant qu'il a hérité de son grand-père (C++). Nous parlons de la switchdéclaration. On pourrait aussi l'appeler un opérateur à choix multiples. ça a l'air un peu encombrant :

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Une expression ou une variable est indiquée entre parenthèses. Si la valeur de l'expression est value1, la machine Java commence à exécuter code1. Si l'expression est égale à value2, l'exécution saute à code2. Si l'expression est égale à value3, alors code3est exécuté.

Exemple:

Code Sortie console
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
High

2. breakdéclaration enswitch

Une caractéristique importante d'une switchinstruction est que le programme saute simplement à la ligne requise (au bloc de code requis) puis exécute tous les blocs de code jusqu'à la fin du switch. Non seulement le bloc de code correspondant à la valeur dans le switch, mais tous les blocs de code jusqu'à la fin du switch.

Exemple:

Code Sortie console
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
Low
Normal
High

Étant donné une température de 36, le programme entrera dans l' switchinstruction, sautera et exécutera le premier bloc de code (le premier cas), puis exécutera joyeusement le reste des blocs de code.

Si vous voulez exécuter un seul bloc de code — le bloc de code associé à la casse correspondante — alors vous devez terminer le bloc avec une breakinstruction ;

Exemple:

Code Sortie console
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

Vous pouvez omettre the breakdans le dernier cas de l' switchinstruction, puisque ce bloc est le dernier avec ou sans instruction break.


3. Action par défaut :default

Autre point important. Que se passe-t-il si aucun des cas répertoriés dans ne switchcorrespond à l'expression entre parenthèses ?

Si aucune casse correspondante n'est trouvée, le reste de l' switchinstruction est ignoré et le programme poursuit son exécution après l'accolade fermant l' switchinstruction.

Cela dit, vous pouvez également faire en sorte qu'une switchinstruction se comporte comme la branche else d'une if-elseinstruction. Pour ce faire, utilisez le defaultmot-clé.

Si aucun des cases du switchbloc ne correspond à la valeur de l'expression et que le switcha un defaultbloc, le bloc par défaut sera exécuté. Exemple:

Code Sortie console
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Comparer switchetif-else

La switchdéclaration est quelque peu similaire à une if-elsedéclaration, seulement plus compliquée.

Vous pouvez toujours réécrire le code d'une switchinstruction en plusieurs ifinstructions. Exemple:

Coder avec interrupteur Coder avec if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

Le code de gauche fonctionnera exactement de la même manière que le code de droite.

Une chaîne d' if-elseinstructions multiples est préférable lorsqu'une ifinstruction contient diverses expressions complexes dans chaque cas distinct.



5. Quelles expressions peuvent être utilisées dans une switchdéclaration ?

Tous les types ne peuvent pas être utilisés comme caseétiquettes dans une switchinstruction. Vous pouvez utiliser des littéraux des types suivants :

  • types entiers : byte, short, int,long
  • char
  • String
  • n'importe quel enumtype

Vous ne pouvez pas utiliser d'autres types comme étiquettes de cas.

Exemple d'utilisation à enuml'intérieur d'une switchinstruction :

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

Remarque : Si vous utilisez une instruction enumà l'intérieur d'une switchinstruction, vous n'avez pas besoin d'écrire le nom de la classe devant chaque valeur dans les caseétiquettes. Il suffit d'écrire la valeur.