Students first see switch
/case
as a second syntax for if
/else
, but eventually they should see its strength in creating cascades. I know of the traditional example of printing a cumulative song, like "Twelve Days of Christmas", and below I've placed some code I use to illustrate the difference in use-case between if
statements and switch
cases. It nicely prints out all 108 lines of the song Alouette in 44 lines of code.
The only other motivating example I can think of is a graduated tax calculator (based on the US Federal Income Tax), where cascades can be a nice way to approach the problem.
These examples are fine, but it's not enough to get the lightbulb to flick on for most of my students. What I need is a few more motivating examples that really show students why switch
/case
is useful. What other examples show this clearly?
System.out.println("Alouette, gentille alouette,\n"
+ "Alouette, je te plumerai.\n");
for(int verse = 1; verse <= 8; verse++){
if(verse == 1){
System.out.println("Je te plumerai la tête.\nJe te plumerai la tête.");
} else if (verse == 2){
System.out.println("Je te plumerai le bec.\nJe te plumerai le bec.");
} else if (verse == 3){
System.out.println("Je te plumerai les yeux.\nJe te plumerai les yeux.");
} else if (verse == 4){
System.out.println("Je te plumerai le cou.\nJe te plumerai le cou.");
} else if (verse == 5){
System.out.println("Je te plumerai les ailes.\nJe te plumerai les ailes.");
} else if (verse == 6){
System.out.println("Je te plumerai les pattes.\nJe te plumerai les pattes.");
} else if (verse == 7){
System.out.println("Je te plumerai la queue.\nJe te plumerai la queue.");
} else if (verse == 8){
System.out.println("Je te plumerai le dos.\nJe te plumerai le dos.");
}
switch(verse){
case 8:
System.out.println("Et le dos! Et le dos!");
case 7:
System.out.println("Et la queue! Et la queue!");
case 6:
System.out.println("Et les pattes! Et les pattes!");
case 5:
System.out.println("Et les ailes! Et les ailes!");
case 4:
System.out.println("Et le cou! Et le cou!");
case 3:
System.out.println("Et les yeux! Et les yeux!");
case 2:
System.out.println("Et le bec! Et le bec!");
case 1:
System.out.println("Et la tête! Et la tête!");
default:
System.out.println("Alouette! Alouette!\n"
+ "Ah-ah-ah-ah\n");
}
System.out.println("Alouette, gentille alouette,\n"
+ "Alouette, je te plumerai.\n");
break;
in each case? I thought it was necessary... $\endgroup$break
s is the great strength of the structure. If you put a break in every case, you will be back to anif
/else
structure. But if you skip some... try running the code =D $\endgroup$break
for each case. Makes it obvious that it is a multi-branch decision point. $\endgroup$