101 votes

Utilisation de l'instruction switch avec une plage de valeurs dans chaque cas?

En Java, est-il possible d'écrire une déclaration de commutation (switch statement) où chaque cas contient plus d'une valeur? Par exemple (bien que clairement le code suivant ne fonctionnera pas):

switch (num) {
    case 1 .. 5:
        System.out.println("test du cas de 1 à 5");
        break;
    case 6 .. 10:
        System.out.println("test du cas de 6 à 10");
        break;
}

Je pense que cela peut être fait en Objective C, existe-t-il quelque chose de similaire en Java? Ou devrais-je simplement utiliser des instructions if, else if à la place?

0 votes

Il y a même des extensions en C pur qui le permettent.

0 votes

Dans ce cas, peut-être que if/else est une meilleure solution.

1 votes

Pas aujourd'hui, mais les gens de Java explorent des options pour cela aux côtés de la mise en correspondance de motifs dans les expressions switch (s'inspirant fortement de Scala, je dirais). Recherchez "guard" dans ce document qui capture des idées possibles: cr.openjdk.java.net/~briangoetz/amber/switch-rehab.html

111voto

missingfaktor Points 44003

Java n'a rien de tel. Pourquoi ne pas simplement faire ce qui suit?

public static boolean isBetween(int x, int lower, int upper) {
  return lower <= x && x <= upper;
}

if (isBetween(num, 1, 5)) {
  System.out.println("testant de 1 à 5");
} else if (isBetween(num, 6, 10)) {
  System.out.println("testant de 6 à 10");
}

1 votes

Cela fonctionne très bien et est simple. De plus, si vous souhaitez sélectionner des nombres qui ne sont pas dans la plage, tout ce dont vous avez besoin est si(!isBetween... , bon travail.

1 votes

@missingfaktor J'ai un peu critiqué votre réponse. Vous voudriez probablement répondre quelque chose. +1 cependant.

0 votes

@MCFMpieur, s'il vous plaît ne modifiez pas ma réponse avec vos préférences de formatage personnel. Ce n'est pas une édition utile.

79voto

Jeffrey Points 22209

La chose la plus proche que vous pouvez obtenir de ce type de comportement avec les déclarations switch est

switch (num) {
case 1:
case 2:
case 3:
case 4:
case 5:
     System.out.println("1 à 5");
     break;
case 6:
case 7:
case 8:
case 9:
case 10:
     System.out.println("6 à 10");
     break;
}

Utilisez des déclarations if.

1 votes

Je suis presque certain que c'est exactement ce qu'il essaie d'éviter.

0 votes

@Hasen c'est pourquoi je recommande d'utiliser des déclarations conditionnelles à la place :)

0 votes

Eh bien, un commentaire aurait été mieux comme Eric Wang ci-dessus.

33voto

Ha Yi Points 77

L'autre alternative consiste à utiliser une opération mathématique en le divisant, par exemple :

switch ((int) num/10) {
    case 1:
        System.out.println("10-19");
        break;
    case 2:
        System.out.println("20-29");
        break;
    case 3:
        System.out.println("30-39");
        break;
    case 4:
        System.out.println("40-49");
        break;
    default:
        break;
}

Mais, comme vous pouvez le voir, cela ne peut être utilisé que lorsque la plage est fixe dans chaque cas.

9 votes

Cela fonctionne bien avec les codes d'état HTTP divisés par 100.

15voto

ptay89 Points 751

Je ne pense pas que vous puissiez le faire en Java. Le mieux est de simplement mettre le code dans le dernier cas de la plage.

switch (num) {
  case 1: case 2: case 3: case 4: case 5: 
     System.Out.Println("test des cas 1 à 5");
     break;
  case 6: case 7: case 8: case 9: case 10:
     System.Out.Println("test des cas 6 à 10");
     break;
  default:
     //
}

11voto

Jitendra Points 11
  cas 1: cas 2: cas 3: cas 4: cas 5:
         System.out.println("test des cas 1 à 5");
         break;
  cas 6: cas 7: cas 8: cas 9: cas 10:
         System.out.println("test des cas 6 à 10");
         break;
  par défaut:
         System.out.println("par défaut");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X