.... but the if-else-statement is not intrinsically an N-way selection statement
switch ( INT-EXPRESSION )
{
case INT-VALUE1: STATEMENT11;
STATEMENT12;
...
break; // Marks the end of case INT-VALUE1
case INT-VALUE2: STATEMENT21;
STATEMENT22;
...
break; // Marks the end of case INT-VALUE2
... (more cases if desired) ...
[default: STATEMENTd1; // Optional clause
STATEMENTd2;
...
break; ]
}
|
Meaning of the switch statement:
|
|
import java.util.Scanner;
public class Switch01
{
public static void main(String[] args)
{
int a;
String name = "";
Scanner in = new Scanner(System.in); // Construct Scanner object
System.out.print("Enter a numeric month (1-12): ");
a = in.nextInt(); // Read in next number into a
switch ( a )
{
case 1: name = "January"; break; // For brevity, I put
case 2: name = "February"; break; // the "break" statement
case 3: name = "March"; break; // on the same line.
case 4: name = "April"; break;
case 5: name = "May"; break;
case 6: name = "June"; break;
case 7: name = "July"; break;
case 8: name = "August"; break;
case 9: name = "September"; break;
case 10: name = "October"; break;
case 11: name = "November"; break;
case 12: name = "December"; break;
default: name = "Invalid month"; break; // <-- This break statement
// is redundant
}
System.out.println("Name of month = " + name);
}
}
|
Explanation:
|
switch ( INT-EXPRESSION ) <--- must be an integer valued expression
{
...
}
|
|
Therefore, we can also use them in the switch statement !!
Example:
public class Switch02
{
public static void main(String[] args)
{
char x;
String name = "";
x = 'C';
switch ( x ) // char is converted to int automatically !
{
case 'A': name = "January"; break;
case 'B': name = "February"; break;
case 'C': name = "March"; break;
case 'D': name = "April"; break;
case 'E': name = "May"; break;
case 'F': name = "June"; break;
case 'G': name = "July"; break;
case 'H': name = "August"; break;
case 'I': name = "September"; break;
case 'J': name = "October"; break;
case 'K': name = "November"; break;
case 'L': name = "December"; break;
default: name = "Invalid month"; break;
}
System.out.println("Name of month = " + name);
}
}
|
This program will compile correctly and run (prints "March").
How to run the program:
|
public class Switch03
{
public static void main(String[] args)
{
long a;
String name = "";
a = 10;
switch ( a ) // Illegal !
{
case 1: name = "January"; break;
case 2: name = "February"; break;
case 3: name = "March"; break;
case 4: name = "April"; break;
case 5: name = "May"; break;
case 6: name = "June"; break;
case 7: name = "July"; break;
case 8: name = "August"; break;
case 9: name = "September"; break;
case 10: name = "October"; break;
case 11: name = "November"; break;
case 12: name = "December"; break;
default: name = "Invalid month"; break;
}
System.out.println("Name of month = " + name);
}
}
|
You will get the following compile error:
Switch03.java:11: possible loss of precision
found : long
required: int
switch ( a )
^
|
|
(This is not the case in Java 6 and other languages such as C/C++)
import java.util.Scanner;
public class Switch04
{
public static void main(String[] args)
{
String name = "";
int a;
Scanner in = new Scanner(System.in); // Construct Scanner object
System.out.print("Enter the name of a month (lower case): ");
name = in.next(); // Read in name
switch ( name )
{
case "january": a = 1; break;
case "february": a = 2; break;
case "march": a = 3; break;
case "april": a = 4; break;
case "may": a = 5; break;
case "june": a = 6; break;
case "july": a = 7; break;
case "august": a = 8; break;
case "september": a = 9; break;
case "october": a = 10; break;
case "november": a = 11; break;
case "december": a = 12; break;
default: a = 0; break;
}
System.out.println("Index of month = " + a);
}
}
|
We cannot compile and run this program because Java SE7 is not yet available !!!
|
public class Switch05
{
public static void main(String[] args)
{
int ng;
String lg = "";
Scanner in = new Scanner(System.in); // Construct Scanner object
ng = in.nextInt(); // Read in next number
switch ( ng )
{
case 100:
.... // I left out a lot of "cases" to save space !
case 90: lg = "A"; break;
case 89:
...
case 80: lg = "B"; break;
case 79:
...
case 70: lg = "C"; break;
case 69:
...
case 60: lg = "D"; break;
default: lg = "F"; break;
}
System.out.println("Letter grade = " + lg);
}
}
|
How to run the program:
|