Java Instruction Switch
J'ai un problème à l'aide de l'instruction switch quand j'ai essayé de composer avec une situation particulière.
Par exemple,
J'ai 3 cas: A, B, C.
- pour Un, je veux faire statement_1 et statement_3.
- pour B, je veux faire statement_2 et statement_3.
- pour le C, j'ai envie de ne rien faire
si j'utilise if-else, il ressemble à la suivante:
if ( not C){
do statement_3
if B
do statement 2
else if A
do statement 1
}
Si je veux utiliser l'instruction switch pour faire la même chose, j'ai des soucis.
switch (variable){
case A: do statement_1
case B: do statement_2
//how to do statement 3 here?
}
Je suis en essayant d'éviter la copie de codes. Donc, je pense que la façon de faire les codes aussi simple que je le peux.
Mise à JOUR de 1:
- pour faire mes codes/question plus claire, je veux juste faire mes codes
en tant que simple/clair comme je peux, c'est pourquoi je veux utiliser l'instruction switch
au lieu de if-else. Aussi, j'ai entendu dire que l'interrupteur de la déclaration est généralement
plus rapide que if-else. (Je ne suis pas sûr à 100% si). - Je veux utiliser switch-case parce que les Cas A, B, C sont de type enum. ils
ne sont pas variable. Désolé pour la confusion. - chaque consolidés sont plus que 10 lignes de codes. C'est pourquoi je ne veux pas faire les choses suivantes:
switch (enum variable) { case A: statement1 statement3 break; case B: statement2 statement3 break;
}
Ce code ne fonctionne pas, parce que Java 6 et plus attend une valeur d'un type primitif. Java 7 peut traitées qu'avec des Chaînes.
l'interrupteur n'est pas bon, vous ne pouvez pas ignorer les cas, c'est ce que vous avez à faire pour éviter de coder l'appel à statement_3 deux fois
quel est le problème avec
Je pense que le cas est trop belle...
Ou Remplacer le Conditionnel avec le Polymorphisme et de se débarrasser de la si / commutateur de
l'interrupteur n'est pas bon, vous ne pouvez pas ignorer les cas, c'est ce que vous avez à faire pour éviter de coder l'appel à statement_3 deux fois
quel est le problème avec
if
? Si un commutateur est pas le bon outil, ne l'utilisez pas. La plupart du temps, c'est pas le bon outil.Je pense que le cas est trop belle...
Ou Remplacer le Conditionnel avec le Polymorphisme et de se débarrasser de la si / commutateur de
OriginalL'auteur Joey | 2013-07-23
Vous devez vous connecter pour publier un commentaire.
je recommande de définir exactement ce qu'staments devrait être exécuté:
pour mise à Jour-3:
de créer des méthodes pour celles de 10 lignes:
si vous êtes toujours d'exécution statement_3, sauf pour le cas C, vous pouvez aller avec si/d'autre-blocs comme vous l'avez écrit.
mais à mon avis honnête:
définir EXACTEMENT ce qui doit être fait auquel cas si vous avez une petite quantité de cas.
il est plus facile à lire pour les autres
OriginalL'auteur Philipp Sander
Vous pouvez faire ceci:
OriginalL'auteur jh314
Pourquoi ne pas imbriquer les passer dans l'instruction if? il n'y a pas de répétition de code de cette façon.
ou de faire utiliser à la fois le if et le switch?
Parce que la question à l'aide d'une instruction switch. Si c'est seulement 2 ou 3 cas, alors l'if-elseif-else est le chemin à parcourir. mais si il y a un regroupement d'états qui partagent toutes le même code, disons une douzaine de fois, mais pas en vertu d'un scénario, pourquoi répéter le code quand vous pouvez avoir exécuté avant que le commutateur (tant qu'une certaine condition n'est pas remplie)?
OriginalL'auteur Arthur Weborg
Je trouve souvent l'introduction de
enum
s ajoute de la clarté. Ici, j'imagine que chaqueenum
est un problème qui peut être résolu par le biais d'un certain nombre de processus:Noter ici que vous obtenez l'avantage supplémentaire d'être en mesure de traiter certaines questions en utilisant les solutions d'autres questions (voir mon
D
enum
).OriginalL'auteur OldCurmudgeon
Si un cas a plus que 2 à 3 états, il est bette(du point de vue de la lisibilité et de nettoyer le code) pour extraire comme des méthodes distinctes:
OriginalL'auteur Sergii Shevchyk
OriginalL'auteur Sidarth
Une pause permet d'économiser beaucoup de temps d'exécution car il "ignore" l'exécution de tout le reste du code dans le bloc de commutateurs
De sortie est de 10
OriginalL'auteur Keshav Gera
Ici u doit utiliser
if statement
de cette façon parce que dansswitch
il y a normalementdefault
valeur aussi.OriginalL'auteur R.Nish