Vous pouvez utiliser les deux CASE
comme suit.
case text1:
case text4:{
//blah
break;
}
VOIR CET EXEMPLE : Cet exemple de code calcule le nombre de jours d'un mois donné :
class SwitchDemo {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = "
+ numDays);
}
}
Voici le résultat de ce code :
Number of Days = 29
FALLTHROUGH :
Un autre point intéressant est la déclaration de rupture. Chaque instruction break met fin à l'instruction switch qui l'entoure. Le flux de contrôle continue avec la première instruction suivant le bloc switch. Les instructions break sont nécessaires car, sans elles, les instructions dans les blocs switch fall through
: Toutes les instructions après l'étiquette de cas correspondante sont exécutées en séquence, indépendamment de l'expression des étiquettes de cas suivantes, jusqu'à ce qu'une instruction break soit rencontrée.
EXEMPLE DE CODE :
public class SwitchFallThrough {
public static void main(String[] args) {
java.util.ArrayList<String> futureMonths =
new java.util.ArrayList<String>();
int month = 8;
switch (month) {
case 1: futureMonths.add("January");
case 2: futureMonths.add("February");
case 3: futureMonths.add("March");
case 4: futureMonths.add("April");
case 5: futureMonths.add("May");
case 6: futureMonths.add("June");
case 7: futureMonths.add("July");
case 8: futureMonths.add("August");
case 9: futureMonths.add("September");
case 10: futureMonths.add("October");
case 11: futureMonths.add("November");
case 12: futureMonths.add("December");
default: break;
}
if (futureMonths.isEmpty()) {
System.out.println("Invalid month number");
} else {
for (String monthName : futureMonths) {
System.out.println(monthName);
}
}
}
}
Voici le résultat de ce code :
August
September
October
November
December
Utilisation de chaînes de caractères dans les instructions de commutation
En Java SE 7 et plus, vous pouvez utiliser un objet String dans le commutateur dans l'expression de l'instruction switch. L'exemple de code suivant, , affiche le numéro du mois en fonction de la valeur de l'objet String nommée mois :
public class StringSwitchDemo {
public static int getMonthNumber(String month) {
int monthNumber = 0;
if (month == null) {
return monthNumber;
}
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
case "april":
monthNumber = 4;
break;
case "may":
monthNumber = 5;
break;
case "june":
monthNumber = 6;
break;
case "july":
monthNumber = 7;
break;
case "august":
monthNumber = 8;
break;
case "september":
monthNumber = 9;
break;
case "october":
monthNumber = 10;
break;
case "november":
monthNumber = 11;
break;
case "december":
monthNumber = 12;
break;
default:
monthNumber = 0;
break;
}
return monthNumber;
}
public static void main(String[] args) {
String month = "August";
int returnedMonthNumber =
StringSwitchDemo.getMonthNumber(month);
if (returnedMonthNumber == 0) {
System.out.println("Invalid month");
} else {
System.out.println(returnedMonthNumber);
}
}
}
La sortie de ce code est 8.
FROM Java Docs
45 votes
Le fait d'être une question de base la rend plus éligible aux votes positifs si elle n'est pas dupliquée car elle est largement utile. Et c'est quelque chose qui ne m'était pas apparu comme possible mais maintenant que je le réalise, c'est d'une évidence aveuglante. Donc, dans l'ensemble, un Q&A assez impressionnant.
1 votes
@RichardTingle - connaissez-vous le dispositif de Duff - fr.wikipedia.org/wiki/Duff%27s_device
0 votes
@SrujanKumarGulla Vous n'êtes pas seul, il y a au moins 85 autres jaloux ;)
6 votes
"Pourquoi tant de votes positifs ? Cherchez "interrupteur java" sur internet et lisez une des mille explications." <-- tu crois que je faisais quoi ?
8 votes
J'ai littéralement cherché "plusieurs cas dans une ligne java" et cette question-réponse était le premier résultat.
0 votes
@Christian Strempfer, parce que le comportement Fallthrough est contrintuitif, facilement méconnu des nouveaux développeurs, et que des valeurs multiples dans un seul cas seraient beaucoup plus lisibles.
0 votes
Christian Strempfer, A mon époque, je ne connaissais pas le fallthrough, alors que le comportement général du switch-case est évident - aucune recherche n'est nécessaire. Quelle désagréable surprise j'ai eue lorsque j'ai eu un bogue à cause du fallthrough. Ce jour-là, j'ai pensé : " Pourquoi diable
case 9
fonctionne quand la valeur est 8, c'est mutuellement exclusif. Quand on ditcase 9
- il ne doit pas être exécuté si la valeur est différente de 9. Point final. C'est la loi de la logique." Comment voudriez-vousif
les déclarations s'exécutant sans conditions correspondantes. De plus, dans certains langages, il n'y a pas de repli, ou ce n'est pas le comportement par défaut (la meilleure solution, à mon avis).0 votes
@Luten : Peu importe que ce soit évident ou non. Chercher la réponse aurait été plus rapide que d'écrire une question.
0 votes
@Christian Strempfer, Chercher et recevoir cette réponse dans le format Q&A de stack overflow au lieu de lire la documentation est souvent plus rapide. Je pense que cette question permet de gagner du temps (peut-être pas pour celui qui l'a écrite mais certainement pour ceux qui l'ont trouvée). C'est pourquoi elle reçoit des votes positifs.
1 votes
La démo de l'interrupteur dans la réponse sélectionnée pourrait être reformulé maintenant que JDK-12 a intégré JEP-325. :)