.... 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:
|