Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Use the switch statement to conditionally perform statements based on an integer expression. Following is a sample program,SwitchDemo
, that declares an integer namedmonth
whose value supposedly represents the month in a date. The program displays the name of the month, based on the value ofmonth
, using theswitch
statement:Thepublic class SwitchDemo { public static void main(String[] args) { int month = 8; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; } } }switch
statement evaluates its expression, in this case the value ofmonth
, and executes the appropriate case statement. Thus, the output of the program is:August
. Of course, you could implement this by using anif
statement:Deciding whether to use anint month = 8; if (month == 1) { System.out.println("January"); } else if (month == 2) { System.out.println("February"); } . . . // and so onif
statement or aswitch
statement is a judgment call. You can decide which to use, based on readability and other factors. Anif
statement can be used to make decisions based on ranges of values or conditions, whereas aswitch
statement can make decisions based only on a single integer value. Also, the value provided to eachcase
statement must be unique.Another point of interest in the
switch
statement is the break statement after eachcase
. Eachbreak
statement terminates the enclosingswitch
statement, and the flow of control continues with the first statement following theswitch
block. Thebreak
statements are necessary because without them, thecase
statements fall through. That is, without an explicitbreak
, control will flow sequentially through subsequentcase
statements. Following is an example,SwitchDemo2
, which illustrates why it might be useful to havecase
statements fall through:The output from this program is:public class SwitchDemo2 { 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; } System.out.println("Number of Days = " + numDays); } }Technically, the finalNumber of Days = 29break
is not required because flow would fall out of theswitch
statement anyway. However, we recommend using abreak
for the lastcase
statement just in case you need to add morecase
statements at a later date. This makes modifying the code easier and less error-prone.You will see
break
used to terminate loops in Branching Statements.Finally, you can use the default statement at the end of the
switch
to handle all values that aren't explicitly handled by one of thecase
statements.int month = 8; . . . switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Hey, that's not a valid month!"); break; }
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2001 Sun Microsystems, Inc. All rights reserved.