![]() ![]() ![]() |
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Use the switchstatement to conditionally perform statements based on an integer expression or enumerated type. The following sample program,
SwitchDemo
, declares an integer named
month
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; default: System.out.println("Not a month!");break; } } }switch
statement evaluates its expression, in this case the value ofmonth
, and executes the appropriate casestatement. 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 or enumerated value. Also, the value provided to eachcase
statement must be unique.Another
switch
statement point of interest is the breakstatement after each
case
. 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 themcase
statements fall through; that is, without an explicitbreak
, control will flow sequentially through subsequentcase
statements. The following example,SwitchDemo2
, illustrates why it might be useful to have
case
statements fall through.This is the output from the program.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; default: numDays = 0; 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
so that modifying the code is easier and less error-prone. Note thatbreak
can be used to terminate loops, as well; see the Branching Statementssection.
Finally, you should use the default
statement at the end of the
switch
statement to handle all values that aren't explicitly handled by one of thecase
statements.
Enumerated types, a feature introduced in 5.0, can be used inswitch
statements. You'll learn all about enumerated types later, in the chapter Classes and Inheritance. This section just shows how to use them in a
switch
statement; fortunately, it's just like using integers in aswitch
statement.The following code from
SwitchEnumDemo
is almost identical to the code you saw previously from
SwitchDemo2
. It substitutes enumerated values for the integers, but otherwise the
switch
statement is the same.public class SwitchEnumDemo { public enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER } public static void main(String[] args) { Month month = Month.FEBRUARY; int year = 2000; int numDays = 0; switch (month) { case JANUARY: case MARCH: case MAY: case JULY: case AUGUST: case OCTOBER: case DECEMBER: numDays = 31; break; case APRIL: case JUNE: case SEPTEMBER: case NOVEMBER: numDays = 30; break; case FEBRUARY: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else numDays = 28; break; default: numDays=0; break; } System.out.println("Number of Days = " + numDays); } }This example shows just a bit of what the Java programming language's enumerations can do. To learn more, see the Enumerated Types
section.
![]() ![]() ![]() |
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.