2011-08-11 3 views
4

Je voudrais savoir comment Java gère plusieurs instances identiques du même cas. Je pense que ce qui suit est logique, sur le plan conceptuel:Cas multiples/répétitifs dans une instruction de commutateur Java

switch (someIntegerValue) 
{ 
    case 1: 
    case 2: 
     DoSomethingForBothCases(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
    case 1: 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
} 

Essentiellement, je voudrais avoir un morceau de code exécuté pour les deux cas, 1 ou 2 (en utilisant fall-through), mais plus tard, ont un morceau de code exécuté uniquement pour le cas 2.

Est-ce que ce qui suit est plutôt nécessaire?

switch (someIntegerValue) 
{ 
    case 1: 
     DoSomethingForBothCases(); 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForBothCases(); 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
} 

Mon code actuel est plus complexe, mais utiliserait le même principe (à savoir quelque chose comme "cas 1: Nope, bien ... cas 2: yep exécuter ce code !; cas 3: Nope, cas 1 fois:? encore Nope !; cas 2 fois: yep exécuter ce code, pas plus de cas: Tous les Done ")

+0

Votre premier code ne sera pas compilé. Votre deuxième code est syntaxiquement correct. Une instruction switch est une table de branche (consultez wikipedia). – DwB

Répondre

1

Vous ne pouvez pas répéter des cas dans une instruction Java switch, il s'agit d'une erreur de compilation. Vous devrez faire ce que vous avez suggéré, ce qui ressemble en fait à un bon affacturage.

+0

avec Geoff sur ce - le deuxième exemple dans l'OP semble bon. – TJunkie

+0

merci - c'est ce que je suis allé avec! –

5

ya un problème avec deux déclarations de commutation ?

switch (someIntegerValue) { 
    case 1: 
    case 2: 
     DoSomethingForBothCases(); 
     break; 
    case 3: 
     DoSomethingUnrelated(); 
     break; 
} 

switch (someIntegerValue) { 
    case 1: 
     DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
    case 2: 
     DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall(); 
     break; 
} 

C'est ce que je ferais.

+0

rien de mal en particulier, (et si le cas 3 n'était pas complètement indépendant, alors deux instructions switch pourraient être nécessaires) mais je préférerais utiliser le deuxième bloc de code dans mon OP sur deux commutateurs. Cela revient au style, car le code compilé (au moins dans un cas assez simple comme celui-ci) ne sera pas significativement plus ou moins efficace de toute façon!: D –

0

Vous ne serez pas en mesure de le faire. Vous ne pouvez pas avoir des cas en double, le compilateur jettera un liss hissy fit. Je comprends votre logique en ce sens que vous voudriez vérifier chaque cas et ensuite continuer et vérifier d'autres cas, mais la déclaration de rupture vous sortirait du casse-tête de toute façon. Ce que je recommanderais, c'est que vous envisagiez d'utiliser une boucle (c'est-à-dire pour, tout) si vous voulez vérifier différentes choses en continu. Couplage si des instructions avec une boucle vous aidera à exécuter des bits de code avant les autres.

Ou si vous aimez vraiment les instructions switch, vous pouvez créer plusieurs commutateurs afin que certaines choses arrivent avant les autres.

0

Comment ça? NOTE: Je ne sais pas beaucoup de Java, que Swift 2

var someIntegerValue = 1 

func someSwitch(){ 

switch (someIntegerValue) { 
    case 1: 
    break; 
    case 2: 
     DoSomethingForBothCases(); 
    break; 
    case 3: 
    DoSomethingUnrelated(); 
    break; 
    } 
} 

où vous avez un deux actions bouton,

une action bouton PROCHAINE

someIntegerValue +=1 // changes someIntegerValue to next case 
someIntegerValue() //loads switch 

une action bouton 2 Retour

someIntegerValue -=1 // changes someIntegerValue to next case 
someIntegerValue() //loads switch 
+0

N'oubliez pas de charger votre fonction au début. –

Questions connexes