En Java, est-il possible d'écrire une instruction switch 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("testing case 1 to 5");
break;
case 6 .. 10:
System.out.println("testing case 6 to 10");
break;
}
Je pense que cela peut être fait en Objective C, y a-t-il une chose similaire en Java? Ou devrais - je utiliser simplement if
, des else if
déclarations à la place?
java
if-statement
switch-statement
davidx1
la source
la source
if/else
- être une meilleure solution.Réponses:
Java n'a rien de ce genre. Pourquoi ne pas faire ce qui suit?
la source
Le plus proche de ce type de comportement avec des
switch
déclarations estUtilisez des
if
déclarations.la source
une autre alternative consiste à utiliser l'opération mathématique en la divisant, par exemple:
Mais, comme vous pouvez le voir, cela ne peut être utilisé que lorsque la plage est fixe dans chaque cas.
la source
Je ne pense pas que vous puissiez faire cela en Java. Le mieux est de simplement mettre le code dans le dernier cas de la plage.
la source
la source
Je sais que cet article est ancien mais je pense que cette réponse mérite une certaine reconnaissance. Il n'est pas nécessaire d'éviter l'instruction switch. Cela peut être fait en java mais via l'instruction switch, pas les cas. Il s'agit d'utiliser des opérateurs ternaires.
la source
switch ((1 <= num && num <= 5 ) ? "1 .. 5" : ...
et ensuitecase "1 .. 5":
.Ou vous pouvez utiliser vos cas solo comme prévu et utiliser votre cas par défaut pour spécifier les instructions de plage comme:
la source
Essayez ceci si vous devez utiliser switch.
la source
Non, vous ne pouvez pas faire ça. Le mieux que vous puissiez faire est que
la source
Il est possible de regrouper plusieurs conditions dans une même
case
instruction en utilisant le mécanisme de chute autorisé par les instructions switch, il est mentionné dans le tutoriel Java et entièrement spécifié dans la section §14.11. La déclaration switch de la spécification du langage Java .L'extrait de code suivant est tiré d'un exemple du didacticiel, il calcule le nombre de jours de chaque mois (numérotés du mois 1 au mois 12):
Comme vous pouvez le voir, pour couvrir une plage de valeurs dans une seule
case
instruction, la seule alternative est de lister chacune des valeurs possibles individuellement, l'une après l'autre. Comme exemple supplémentaire, voici comment implémenter le pseudocode dans la question:la source
Vous pouvez utiliser un
enum
pour représenter vos plages,la source
Il est pris en charge à partir de Java 12. Consultez JEP 354 . Pas de possibilité de «gamme» ici, mais peut être utile non plus.
Vous devriez également pouvoir l'implémenter sur ints. Notez que votre instruction switch doit être exhaustive (en utilisant un
default
mot clé ou en utilisant toutes les valeurs possibles dans les instructions case).la source
Voici une manière magnifique et minimaliste d'aller
la source
if..elseif
alternative utilisant en cascade l'opérateur ternaire (condition ? statementIfTrue : statementIfFalse
).La réponse de @missingfaktor est en effet correcte mais un peu trop compliquée. Le code est plus détaillé (au moins pour des intervalles continus) qu'il pourrait l'être, et nécessite des surcharges / casts et / ou un paramétrage pour long, float, Integer, etc.
la source
Num
classe de type de Haskell si vous souhaitez mieux comprendre ce point.if
s comme si je débordais progressivement de la sous-plage inférieure. En outre, un calcul redondant n'est pas un problème du tout, mais la comparaison redondante est un peu inquiétant: il devient plus simple de faire des comparaisons adjacentes désynchronisés, par exemple après un certain edit:if (isBetween(x, 1, 4)) {...} else if (isBetween(x, 6, 10))
. Quoi qu'il en soit, ce n'est pas grave.Real
nonNum
).Utilisez une
NavigableMap
implémentation, commeTreeMap
.la source
if (messages.floorEntry(value)!=null)
si vous utilisez une valeur entièrefloorEntry()
ne reviendra jamaisnull
(l'insertion de laInteger.MIN_VALUE
clé vise à empêcher cela). Mais, quel que soit votre type de valeur, vous devez décider comment gérer les clés en dehors de la plage valide.Pour numéro d'entrée dans la plage 0..100
la source
Ce type de comportement n'est pas pris en charge en Java. Cependant, si vous avez un grand projet qui en a besoin, envisagez de mélanger du code Groovy dans votre projet. Le code Groovy est compilé en code octet et peut être exécuté avec JVM. L'entreprise pour laquelle je travaille utilise Groovy pour écrire des classes de service et Java pour tout écrire.
la source