2
votes

Fall-through si la valeur par défaut est au milieu du boîtier du commutateur?

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?


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

1
votes

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.


0 commentaires

0
votes

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.


1 commentaires

... 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.