Switch Case Program in Java
Switch Case Program in Java
The switch case program in Java controls which code snippet gets executed on the basis of the value of the expression mentioned in the switch statement. It is similar to the if-else ladder statements that controls the flow of the program. However, the switch case program is more readable as compared to the if-else statements. The basic syntax of the switch case is mentioned below.
switch (expression) { case valOfCase1: // body of the first case, to be executed // if the value of the expression is equal to valOfCase1. break; case valOfCase2: // body of the second case, to be executed if // the expression is equal to valOfCase2. break; ... ... default: // body of the default case, to be executed if // any of the above case does not execute. }
Observe the following switch program.
Filename: SwitchCaseExample.java
public class SwitchCaseExample { public static void main(String argvs[]) { String fruit = "Mango"; // the given fruit // The switch block is taking fruit as its expression // and displaying result accordingly switch(fruit) { case "Lichi": System.out.println("The color of the Lichi is red."); break; case "Mango": System.out.println("The color of the Mango is yellow."); break; case "Sweet Lime": System.out.println("The color of the Sweet Lime is green."); break; case "Grapes": System.out.println("The color of the Grapes is light green."); break; // The default case: no value provided default : System.out.println("Please provide a valid input."); } } }
Output:
The color of the Mango is yellow.
Explanation: We have taken the variable fruit as the expression of the switch statement whose value is Mango. This value matches with the second case, and hence, only the body of the second case is executed. Please note that values of the different cases of the switch block are case sensitive. Thus, mango and Mango are different. If we replace the value of the fruit variable from Mango to mango, then the default case gets the chance to execute. The default case never comes with a value. It is worth mentioning that break statements also play a very important role in deciding the output.
Importance of break statements & flow diagram of switch case
The flow diagram of the switch case in Java is given below.
The above flow diagram is valid only when we have used break statements in our code. The output changes dramatically when the break statements are commented. Observe the below-written code.
Filename: SwitchCaseExample1.java
public class SwitchCaseExample1 { public static void main(String argvs[]) { String fruit = "Mango"; // the given fruit // The switch block is taking fruit as its expression // and displaying result accordingly switch(fruit) { case "Lichi": System.out.println("The color of the Lichi is red."); break; case "Mango": System.out.println("The color of the Mango is green."); // break; case "Sweet Lime": System.out.println("The color of the Sweet Lime is green."); // break; case "Grapes": System.out.println("The color of the Grapes is light green."); // break; // The default case: no value provided default : System.out.println("The fruit is unknown."); } } }
Output:
The color of the Mango is green. The color of the Sweet Lime is green. The color of the Grapes is light green. The fruit is unknown.
Explanation: The first case does not work because the expression value is not matching with the case value. For the second case, the expression value matches and its body is executed. But there is no break statement in the body of the second case. Therefore, the control reaches the body of the third case and executes the statements. There also the break statement is commented. Hence, the control moves to the fourth case and executes its statements. The control still did not find the break statement and thus enter the default section, eventually and then exits from the switch case block.
Thus, the flow diagram of the Java switch case without break statements is given below.
Nesting of Java Switch Case
We can even do the nesting of switch case. The following program does the same.
Filename: SwitchCaseExample2.java
public class SwitchCaseExample2 { public static void main(String argvs[]) { //P - Physics, C - Chemistry, M - Mathematics char sub = 'M'; int std = 8; // For class 8 // This switch case is displaying a few chapters of subjects Physics, Chemistry, and // Mathematics for classes 7, 8, 9, and 10. switch( std ) { case 7: switch( sub ) // Nested switch case { // A few chapters of Physics, Chemistry, and Mathematics for class 7 case 'P': System.out.println("Motion and Time, Light, Electric Current and its Effects"); break; case 'C': System.out.println("Acids, Bases and Salts, Physical and Chemical Changes"); break; case 'M': System.out.println("Lines and Angles, Integers, Rational Numbers"); break; default: System.out.println("Subject not found."); } break; case 8: switch( sub ) // Nested switch case { // A few chapters of Physics, Chemistry, and Mathematics for class 8 case 'P': System.out.println("Friction, Sound, Light"); break; case 'C': System.out.println("Metals and Non-Metals, Chemical Effects of Electric Current"); break; case 'M': System.out.println("Mensuration, Factorization, Data Handling"); break; default: System.out.println("Subject not found."); } break; case 9: switch( sub ) // Nested switch case { // A few chapters of Physics, Chemistry, and Mathematics for class 9 case 'P': System.out.println("Motion, Force and Work, Sound"); break; case 'C': System.out.println("Matter-Nature and Behavior, Structure of atoms:"); break; case 'M': System.out.println("Polynomials, Triangles, Circles"); break; default: System.out.println("Subject not found."); } break; case 10: switch( sub ) // Nested switch case { // A few chapters of Physics, Chemistry, and Mathematics for class 10 case 'P': System.out.println("Effects of Current, Natural Phenomena"); break; case 'C': System.out.println("Chemical Substances – Nature and Behavior, Periodic Classification Of Elements"); break; case 'M': System.out.println("Polynomials, Triangles, Introduction to Trigonometry"); break; default: System.out.println("Subject not found."); } break; default: System.out.println("Class not found."); } } }
Output:
Mensuration, Factorization, Data Handling
Explanation: We have used switch case inside different cases. This is called nesting. The std variable handles the class, and the sub variable deals with the subject. The case of value 8 (std = 8 in our case) is selected, and inside that case, we execute the case handling the subject Mathematics (sub = ‘M’).
Applications of Java Switch Case
Java switch case is used in various situations. The following examples illustrate some usages of Java Switch Case.
To Check Vowels and Consonants
Filename: SwitchCaseExample3.java
public class SwitchCaseExample3 { public static void main(String argvs[]) { char c='E'; // input character // Distinguishing between vowels and consonants // This switch case handles case-sensitiveness switch(c) { case 'a': System.out.println("a is the vowel."); break; case 'A': System.out.println("A is the vowel."); break; case 'e': System.out.println("e is the vowel."); break; case 'E': System.out.println("E is the vowel."); break; case 'i': System.out.println("i is the vowel."); break; case 'I': System.out.println("I is the vowel."); break; case 'o': System.out.println("o is the vowel."); break; case 'O': System.out.println("O is the vowel."); break; case 'u': System.out.println("u is the vowel."); break; case 'U': System.out.println("U is the vowel."); break; default: System.out.println(ch + " is the consonant."); } } }
Output:
E is the vowel.
Explanation: Any character barring a, A, e, E, i, I, o, O, u, U is consonant. The characters A, a, e, E, i, I, o, O, u, U are vowels. On the basis of the definition of vowels and consonants, we have written our code. Each case block handles one vowel. The default block deals with the consonants.
Displaying the Months of a Year
Filename: SwitchCaseExample4.java
public class SwitchCaseExample4 { public static void main(String argvs[]) { int month= 10; // the given number // This switch case does one to one mapping of number to its corresponding months // of a year. switch(month) { case 1: System.out.println("The month is January."); break; case 2: System.out.println("The month is February."); break; case 3: System.out.println("The month is March."); break; case 4: System.out.println("The month is April."); break; case 5: System.out.println("The month is May."); break; case 6: System.out.println("The month is June."); break; case 7: System.out.println("The month is July."); break; case 8: System.out.println("The month is August."); break; case 9: System.out.println("The month is September."); break; case 10: System.out.println("The month is October."); break; case 11: System.out.println("The month is November."); break; case 12: System.out.println("The month is December."); break; default: System.out.println("Invalid month"); } } }
Output:
The month is October.
Explanation: We have only 12 months in a year. Therefore, the first 12 natural number represents 12 months anything else becomes invalid, which is handled by the default case.
Another application of the Java switch case is the basic calculator, which we have already discussed earlier.
Difference Between Java Switch Case and if-else ladder
As far as execution time is concerned, the Java switch-case is better than the Java if-else ladder. Because every case in a switch block is completely independent of any other case present in that switch-case, whereas, in an if-else, the else is dependent on the expression present in the if statement. Hence, the independence of the cases, the compiler is able to do the re-ordering to make the execution faster for a switch-case.
We know that both the Java switch case and if-else are decision making statements. Also, whatever we can do with the switch case can be done by if-else statements too. However, the reverse of it is not true. Let’s understand the concept through a Java program.
Suppose, if the input number is between 0 to 100, we print India, and if it is greater than 100, we print America. Finally, for those numbers that are less than 0, we print Russia. The code snippet of this scenario using the if-else will be:
if(no >=0 and no <= 100) System.out.println("India"); else if(no > 100) System.out.println("America"); else System.out.println("Russia");
To do the same thing using the switch case is impossible because the cases inside the switch block deal with the specific values, not with the ranges.