By Barry A. Burd

For Java programmers the switch statement can be a useful piece of code. But, there are a few things you should know before you use it. A switch statement can take the following form:

switch (Expression) {

case FirstValue:

Statements

 

case SecondValue:

MoreStatements

 

// ... more cases...

 

default:

EvenMoreStatements

}

Here are some tidbits about switch statements:

  • The Expression doesn’t have to have an int value. It can be char, byte, short, or int.

For example, the following code works in Java 5 and later:

char letterGrade;

letterGrade =keyboard.findWithinHorizon(".",0).charAt(0);

 

switch (letterGrade) {

case 'A':

System.out.println("Excellent");

break;

 

case 'B':

System.out.println("Good");

break;

 

case 'C':

System.out.println("Average");

break;

}

In fact, if you avoid using the Scanner class and its findWithinHorizon method, this bullet’s switch statement works with all versions of Java — old and new.

  • If you use Java 7 or later, the Expression can be a String. For example, the following code doesn’t work with Java 6, but works well in Java 7:

String description;

description = keyboard.next();

 

switch (description) {

case "Excellent":

System.out.println('A');

break;

 

case "Good":

System.out.println('B');

break;

 

case "Average":

System.out.println('C');

break;

}

  • The Expression doesn’t have to be a single variable. It can be any expression of type char, byte, short, int, or String. For example, you can simulate the rolling of two dice with the following code:

int die1, die2;

 

die1 = myRandom.nextInt(6) + 1;

die2 = myRandom.nextInt(6) + 1;

 

switch (die1 + die2) {

//. . . etc.

  • The cases in a switch statement don’t have to be in order. Here’s some acceptable code:

switch (randomNumber) {

case 2:

System.out.println("No, and don't ask again.");

break;

case 1:

System.out.println("Yes. Isn't it obvious?");

break;

case 3:

System.out.print("Yessir, yessir!");

System.out.println(" Three bags full.");

break;

 

//. . .etc.

This mixing of cases may slow you down when you’re trying to read and understand a program, but it’s legal nonetheless.

  • You don’t need a case for each expected value of the Expression. You can leave some expected values to the default. Here’s an example:

switch (randomNumber) {

case 1:

System.out.println("Yes. Isn't it obvious?");

break;

 

case 5:

System.out.println("No chance, Lance.");

break;

 

case 7:

System.out.println("Yes, but only if you're nice to me.");

break;

 

case 10:

System.out.println("No, not until Nell squeezes Rover.");

break;

 

default:

System.out.println("Sorry, I just can't decide.");

break;

}

  • The default clause is optional.

switch (randomNumber) {

case 1:

System.out.println("Yes. Isn't it obvious?");

break;

 

case 2:

System.out.println("No, and don't ask again.");

break;

 

case 3:

System.out.print("I'm too tired.");

System.out.println(" Go ask somebody else.");

}

 

System.out.println("Goodbye");

If you have no default clause, and a value that’s not covered by any of the cases comes up, the switch statement does nothing. For example, if randomNumber is 4, the preceding code displays Goodbye and nothing else.

  • In some ways, if statements are more versatile than switch statements. For example, you can’t use a condition in a switch statement’s Expression:

//You can't do this:

switch (age >= 12 && age < 65)

You can’t use a condition as a case value, either:

//You can't do this:

switch (age) {

case age <= 12: // … etc.