Quel est le meilleur moyen de vérifier si la variable est plus grande qu'un nombre donné à l'aide de l'instruction switch? Ou vous recommandez d'utiliser if-else? J'ai trouvé un tel exemple:
int i;
if(var1>var2) i = 1;
if(var1=var2 i = 0;
if(var1<var2) i = -1;
switch (i);
{
case -1:
do stuff;
break;
case 0:
do stuff;
break;
case 1:
do stuff;
break;
}
Que pouvez-vous dire à un novice à propos de l'utilisation de "supérieur à ou égal" dans les instructions de commutateur?
Vous ne savez pas si c'est ce que vous demandez, mais vous pouvez le faire de cette façon:
int var1;
int var2;
int signum = Long.signum((long)var1 - var2);
switch(signum) {
case -1: break;
case 0: break;
case 1: break;
}
Je recommanderais fortement une construction if(var1>var2){}else if (var1==var2) {} else {}
. Utiliser un commutateur ici cachera l’intention. Et si une break
est supprimée par erreur?
Switch est utile et clair pour les valeurs énumérées, pas pour les comparaisons.
Tout d’abord une suggestion: switch
car il est indiqué ci-dessus ne devrait être utilisé que pour la commutation et non pour la vérification des conditions.
À partir des instructions de commutateur JLS
SwitchStatement:
switch ( Expression ) SwitchBlock
Les expressions convertibles en int ou Enum sont prises en charge dans l'expression.
Ces étiquettes sont dites associées à l'instruction switch, sous la forme sont les valeurs des expressions constantes (§15.28) ou des constantes enum (§8.9.1) dans les étiquettes de cas.
Seules les expressions constantes et les constantes Enum sont autorisées dans les instructions switch de 1.6 ou moins avec Java 7 Les valeurs de chaîne sont également prises en charge. Aucune expression logique n'est prise en charge.
Sinon, vous pouvez faire comme indiqué par @Stewart dans sa réponse.
Java ne prend en charge que les valeurs directes, et non les plages dans les instructions case
. Par conséquent, si vous devez utiliser un commutateur, mappez d’abord les options, puis activez cette option, comme dans l’exemple que vous fournissez est votre seul choix. Cependant, c'est assez excessif - utilisez simplement les déclarations if.
Une instruction switch sert à exécuter du code lorsque des valeurs spécifiques sont renvoyées. Le paramètre if then else vous permet de sélectionner une plage de valeurs dans une instruction. Je vous recommanderais de faire quelque chose comme ce qui suit (même si je préfère personnellement la méthode Integer.signum) si vous souhaitez examiner plusieurs plages:
int i;
if (var1 > var2) {
i = 1;
}
else if (var1 == var2) {
i = 0;
}
else {
i = -1;
}
Vous êtes mieux avec les déclarations if
; l'approche switch
est beaucoup moins claire et, dans ce cas, votre approche switch
est objectivement erronée. Le contrat pour Comparable#compareTo
ne nécessite pas le renvoi de -1
ou 1
, mais simplement que la valeur de la int
retournée soit négative ou positive. Il est tout à fait légitime que compareTo
renvoie -42
et votre instruction switch
abandonnerait le résultat.
Si one la valeur de la variable est utilisée, utilisez switch. Si plusieurs variables sont en jeu, utilisez if. Dans votre problème, il devrait êtreif.
Malheureusement, vous ne pouvez pas le faire en Java. C'est possible dans CoffeeScript
ou dans d'autres langues.
Je recommanderais d'utiliser une instruction if
-else
- en déplaçant votre "action" dans des méthodes supplémentaires De cette façon, vous pouvez conserver votre if-else dans un code clairement lisible.