web-dev-qa-db-fra.com

Comment utiliser supérieur ou égal dans une instruction switch

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?

10
Vlad Holubiev

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;
}
19
Stewart

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.

11
Guillaume

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. 

6
Narendra Pathai

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.

4
Oliver Matthews

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;
}
3
talegna

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.

2
chrylis

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.

0
Sajal Dutta

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.

0
treeno