J'ai une question. Dans une instruction switch, est-ce que default
est testé pour le dernier même s'il n'est pas le dernier?
Si tel est le cas, dans l'extrait de code suivant:
int i = 6; int a=0, b=0, c=0; switch (i) { case 1: a++; case 2: default: case 3: b++; case 6: c++; } System.out.println(a + " " + b + " " + c);
Après avoir mis en correspondance le cas 6 et incrémenté la valeur de c, puisqu'il n'y a pas de pause, il reviendra par défaut?
J'ai essayé ce code et il ne semble pas être passé par défaut et aucune erreur ne s'est produite. Je voulais juste savoir?
3 Réponses :
Actuellement, tous vos cas échoueront, car aucun cas n'a de break;
également, votre commutateur est conditionnellement basé sur i
, donc si vous le souhaitez voir chaque cas, vous devez changer i
.
L'utilisation de break;
ne devrait avoir aucun effet sur l'emplacement de vos cas dans votre état de commutation, c'est aussi le "cas" pour default
switch
est évalué à partir de la case
correspondante à break
ou à la fin de l'instruction switch
. Si vous passez 6, il entrera la casse pour 6 et ne fera qu'un seul incrément. Mais si vous entrez 7, il commencera à partir de default
et tombera jusqu'à la fin du commutateur en effectuant deux incréments.
Il n'y a pas de test supplémentaire des étiquettes de cas au-delà du test initial au début de l'instruction switch. Une fois que i
a été évalué par l'instruction switch, le contrôle passe au libellé case 6:
car cela correspond à i
. Les instructions sont ensuite exécutées dans l'ordre jusqu'à la fin de l'instruction switch, ou jusqu'à ce qu'une instruction break
soit rencontrée. Cela signifie que seul c
est incrémenté.
Une instruction break
ne terminera que l'exécution de l'instruction switch entière; si une instruction break
est présente n'a aucun effet sur le nouveau test de l'expression de commutateur, car le nouveau test de l'expression de commutateur ne se produira pas de toute façon.
Si vous voulez que default
soit le libellé de cas saisi, alors i
ne doit correspondre à aucun libellé de cas au début de l'instruction switch . Si i
est 99
au début de l'instruction switch, alors les deux b
et c
sont incrémentés (une chute se produit ).
Il n'y a aucune restriction quant à l'emplacement dans l'ordre des étiquettes de cas où une étiquette default
apparaît, seulement qu'au plus un default
apparaît dans une instruction switch.
... et que je suggère que la plupart des gens feront une double prise si le défaut n'est pas le dernier, tellement inhabituel est-il de le trouver ailleurs.