Switch Statements: Elegant Multi-Way Decisions
If-else-if áĄá áŹá¸ switch ááŻáśá¸áááş code á ááá clean ááźá áşáááşá áááŻáááşáá˝ááşáááşá Multiple cases áá˝áąááᯠefficiently handle ááŻááşáááşá¸ááᯠááąáˇááŹááźáááşá
đŻ áááş áááşáá°áááˇáş áĄááŹááťáŹá¸
áᎠlesson áážáŹ áááş áááşáá°áááˇáş áĄááŹááťáŹá¸:
- Switch statement áá˛áˇ syntax áá˛áˇ áĄááŻááşááŻááşááŻáś
- Case labels áá˛áˇ break statement áĄááŻáśá¸ááźáŻáááşá¸
- Default case ááᯠáááşááᯠááŻáśá¸áááá˛
- Switch vs If-Else-If - áááşáĄááťáááş ááŹááŻáśá¸áááá˛
- Fall-through behavior áá˛áˇ áááŻá ááŻááşááááˇáş áĄááťááşááťáŹá¸
- Modern Java Switch expressions (Java 12+)
- Real-world examples ááťáŹá¸
đ Switch Statement áááŻáᏠááŹáá˛?
Switch statement áááŻáᏠvariable áá áşááŻáá˛áˇ value ááᯠmultiple possible values áá˝áąáá˛áˇ áážááŻááşá¸áážááşááźáŽá¸ matching case ááᯠexecute ááŻááşáá˛áˇ control flow statement ááŤá If-else-if ladder áááş code á ááᯠclean ááźá áşááźáŽá¸á áááŻááźááşááŤáááşá
ááąáˇá ááşáááážáŹ áĽáááŹ:
- Menu áážáŹ 1 áážáááşáááş â Coca Cola, 2 áážáááşáááş â Pepsi, 3 áážáááşáááş â Sprite
- ááąáˇáááş á á áşááąá¸ááźááşá¸: Monday â áĄááŻááşááąáˇ, Saturday â á ááą, Sunday â ááááşášááá˝áą
- Grade á á áşááąá¸ááźááşá¸: A â Excellent, B â Good, C â Average
If-else-if áá˛áˇ ááąá¸áááş áážááşááťáŹá¸áááşá switch áá˛áˇ ááąá¸áááş áážááşá¸áááşá¸áááş!
If-Else-If vs Switch
áĄáá°áá° ááááş áá˝ááşááąáááˇáş switch á ááᯠclean:
if (day == 1) {
System.out.println("Monday");
} else if (day == 2) {
System.out.println("Tuesday");
} else if (day == 3) {
System.out.println("Wednesday");
} else if (day == 4) {
System.out.println("Thursday");
} else if (day == 5) {
System.out.println("Friday");
} else {
System.out.println("Weekend");
}
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
default:
System.out.println("Weekend");
}
đš Switch Statement Syntax
Basic syntax structure:
switch (expression) {
case value1:
// value1 áá˛áˇ áá°áááş execute
statements;
break;
case value2:
// value2 áá˛áˇ áá°áááş execute
statements;
break;
case value3:
// value3 áá˛áˇ áá°áááş execute
statements;
break;
default:
// áááş case áá˛áˇááž ááá°áááş execute (optional)
statements;
}
áĄááąá¸ááźáŽá¸áá˛áˇ áĄááťááşááťáŹá¸:
- Expression: int, byte, short, char, String, enum áᲠááŻáśá¸áááŻáˇááááş (long, float, double áááá°á¸)
- Case values: Constant ááźá áşááááş (variables áááŻáśá¸áááŻááşáá°á¸)
- break: Case ááźáŽá¸áááş switch áááą áá˝ááşáááŻáˇ (áááŤáááş fall-through ááźá áşáááş)
- default: Optional ááŤá áááş case áá˛áˇááž ááááŻááşáááş execute ááŻááşáááş
đš Simple Example: Day of Week
ááśááŤááşáááą ááąáˇáááş ááŻááşááźááźááşá¸:
public class DayOfWeek {
public static void main(String[] args) {
int dayNumber = 3;
String dayName;
switch (dayNumber) {
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
case 4:
dayName = "Thursday";
break;
case 5:
dayName = "Friday";
break;
case 6:
dayName = "Saturday";
break;
case 7:
dayName = "Sunday";
break;
default:
dayName = "Invalid day";
}
System.out.println("Day " + dayNumber + " is " + dayName);
}
}
Day 3 is Wednesday
đš Break Statement - áĄááąá¸ááźáŽá¸ááŻáśá¸!
Break statement á case áá áşáᯠexecute ááźáŽá¸áááş switch áááą áá˝ááşáááŻáˇ ááŻáśá¸áááşá break áááŤáááş fall-through ááźá áşááźáŽá¸ áĄáąáŹááşá cases áá˝áą áááş execute ááŻááşáááş!
Without Break (Fall-Through Bug!)
int grade = 2;
switch (grade) {
case 1:
System.out.println("Excellent!");
// break ááŤááááş!
case 2:
System.out.println("Good!");
// break ááŤááááş!
case 3:
System.out.println("Average");
// break ááŤááááş!
default:
System.out.println("Need improvement");
}
Good! Average Need improvement
â ď¸ case 2 ááźáŽá¸ááŹáá˛áˇ ááááşáᲠáĄáąáŹááşáá˝áą áááşááŻááşáá˝áŹá¸áááş!
With Break (Correct!)
int grade = 2;
switch (grade) {
case 1:
System.out.println("Excellent!");
break; // â
case 2:
System.out.println("Good!");
break; // â
case 3:
System.out.println("Average");
break; // â
default:
System.out.println("Need improvement");
}
Good!
â case 2 execute ááźáŽá¸ break áá˛áˇ áá˝ááşáá˝áŹá¸áááş
đš Intentional Fall-Through (ááááş áááşááŻááşá áąááźááşá¸)
áááŤáááś fall-through á useful ááźá áşáááŻááşáááş - multiple cases áĄáá˝ááş áá°ááŽáá˛áˇ code run ááťááşáááş:
public class WorkingDay {
public static void main(String[] args) {
int day = 3;
String dayType;
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
dayType = "Working Day";
break;
case 6:
case 7:
dayType = "Weekend";
break;
default:
dayType = "Invalid";
}
System.out.println("Day " + day + ": " + dayType);
}
}
Day 3: Working Day
áážááşá¸áááşá¸ááťááş:
- case 1, 2, 3, 4, 5 áĄáŹá¸ááŻáśá¸ "Working Day" output ááąá¸áááş
- case 1-4 áážáŹ break áááŤáá°á¸ â fall-through ááźá áşáááş
- case 5 áážáŹááž break áážááááŻáˇ áá˝ááşáá˝áŹá¸áááş
- áᎠpattern á multiple values áĄáá˝ááş áá°ááŽáá˛áˇ action ááŻááşáááŻáˇ ááŻáśá¸áááş
đš String in Switch (Java 7+)
Java 7 áááąá ááźáŽá¸ String áááŻáááşá¸ switch áážáŹ ááŻáśá¸áááŻáˇáááŤááźáŽ:
public class BeverageMenu {
public static void main(String[] args) {
String drink = "Coffee";
int price;
switch (drink) {
case "Coffee":
price = 3000;
System.out.println("Hot or Iced Coffee");
break;
case "Tea":
price = 2000;
System.out.println("Green or Black Tea");
break;
case "Juice":
price = 3500;
System.out.println("Fresh Fruit Juice");
break;
case "Soda":
price = 2500;
System.out.println("Coca Cola or Pepsi");
break;
default:
price = 0;
System.out.println("Not available");
}
System.out.println("Price: " + price + " Kyats");
}
}
Hot or Iced Coffee Price: 3000 Kyats
â ď¸ String switch áááááźáŻáááş:
- Case-sensitive ááźá áşáááş: "coffee" áá˛áˇ "Coffee" ááá°áá°á¸
- null value ááᯠcheck ááŻááşáááŻááşáááş (NullPointerException áážáąáŹááşáááş)
- String comparison á equals() ááŻáśá¸áááş (== áááŻááşáá°á¸)
đť Complete Example: Simple Calculator
Switch áá˛áˇ calculator ááąá¸ áááşááąáŹááşááźáááş:
public class SimpleCalculator {
public static void main(String[] args) {
double num1 = 10;
double num2 = 5;
char operator = '/';
double result;
System.out.println("=== Simple Calculator ===");
System.out.println("Number 1: " + num1);
System.out.println("Number 2: " + num2);
System.out.println("Operator: " + operator);
System.out.println();
switch (operator) {
case '+':
result = num1 + num2;
System.out.println("Addition: " + num1 + " + " + num2 + " = " + result);
break;
case '-':
result = num1 - num2;
System.out.println("Subtraction: " + num1 + " - " + num2 + " = " + result);
break;
case '*':
result = num1 * num2;
System.out.println("Multiplication: " + num1 + " Ă " + num2 + " = " + result);
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
System.out.println("Division: " + num1 + " á " + num2 + " = " + result);
} else {
System.out.println("Error: Cannot divide by zero!");
}
break;
case '%':
if (num2 != 0) {
result = num1 % num2;
System.out.println("Modulus: " + num1 + " % " + num2 + " = " + result);
} else {
System.out.println("Error: Cannot divide by zero!");
}
break;
default:
System.out.println("Error: Invalid operator!");
System.out.println("Please use: +, -, *, /, %");
}
}
}
=== Simple Calculator === Number 1: 10.0 Number 2: 5.0 Operator: / Division: 10.0 á 5.0 = 2.0
đš Practical Example: Days in Month
á áĄáááşáááą áááşááąáŤááşá¸ ááŻááşááźááźááşá¸:
public class DaysInMonth {
public static void main(String[] args) {
String month = "February";
int year = 2024;
int days;
switch (month) {
case "January":
case "March":
case "May":
case "July":
case "August":
case "October":
case "December":
days = 31;
break;
case "April":
case "June":
case "September":
case "November":
days = 30;
break;
case "February":
// Leap year check
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
days = 29;
} else {
days = 28;
}
break;
default:
days = 0;
System.out.println("Invalid month name!");
}
if (days > 0) {
System.out.println(month + " " + year + " has " + days + " days.");
}
}
}
February 2024 has 29 days.
áᎠexample á ááźááŹ:
- Multiple cases áĄáá˝ááş áá°ááŽáá˛áˇ result (31 days, 30 days)
- Switch case áá˛áážáŹ if statement ááŻáśá¸ááźááşá¸ (February leap year)
- Default case áážáŹ error handling
- Real-world practical application
đš Switch vs If-Else-If: áááşáĄááťáááş ááŹááŻáśá¸áááá˛?
| Situation | áĄááąáŹááşá¸ááŻáśá¸ Choice | áĄááźáąáŹááşá¸ááźááťááş |
|---|---|---|
| áá áşáᯠvalue ááᯠmultiple values áá˛áˇ áážááŻááşá¸áážááşááźááşá¸ | Switch | Clean, readable, faster |
| Range checking (x > 10 && x < 20) | If-Else | Switch á range áá á áşáááŻááşáá°á¸ |
| Complex conditions (&&, ||) | If-Else | Switch á logical operators áááŻáśá¸áááŻááşáá°á¸ |
| Equality checking (==) | Switch | More efficient |
| Boolean conditions | If-Else | Switch á boolean áááŻáśá¸áááŻááşáá°á¸ |
| String/Char/Int equality | Switch | Cleaner code |
| Menu systems, day/month selection | Switch | Natural fit |
General Rule:
Single variable ááᯠspecific values áá˝áąáá˛áˇ áážááŻááşá¸áážááşááťááşáááş â Switch
Complex conditions, ranges, multiple variables â If-Else
đš Modern Switch Expressions (Java 12+)
Java 12 áááą switch á expression áĄááąáá˛áˇ ááŻáśá¸áááŻáˇáááŤááźáŽ - break ááááŻááąáŹáˇáá°á¸!
Traditional Switch
int day = 3;
String dayType;
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
dayType = "Weekday";
break;
case 6:
case 7:
dayType = "Weekend";
break;
default:
dayType = "Invalid";
}
Modern Switch Expression
int day = 3;
String dayType = switch (day) {
case 1, 2, 3, 4, 5 -> "Weekday";
case 6, 7 -> "Weekend";
default -> "Invalid";
};
Modern switch áá˛áˇ áĄáŹá¸ááŹááťááşááťáŹá¸:
- break statement ááááŻááąáŹáˇáá°á¸
- Arrow syntax (->) ááŻáśá¸áááş
- Multiple values ááᯠcomma áá˛áˇ áá˝á˛áááŻáˇááááş
- Direct value assignment ááááş
- Code á áááŻáááŻááźáŽá¸ ááᯠclean
Complex Logic with Yield
int marks = 75;
String grade = switch (marks / 10) {
case 10, 9 -> "A";
case 8 -> "B";
case 7 -> "C";
case 6, 5 -> "D";
default -> {
if (marks < 0 || marks > 100) {
yield "Invalid";
} else {
yield "F";
}
}
};
System.out.println("Grade: " + grade);
đŻ áĄááá áážááşááŹá¸ááááˇáş áĄááťááşááťáŹá¸
- Switch statement: Variable áá áşááŻááᯠmultiple values áá˝áąáá˛áˇ áááŻááşá á áşáááş
- Supported types: int, byte, short, char, String, enum (long, float, double áááá°á¸)
- break: Case áá áşáᯠexecute ááźáŽá¸áááş switch áááą áá˝ááşáááŻáˇ (áĄááąá¸ááźáŽá¸ááŻáśá¸!)
- Fall-through: break áááŤáááş áĄáąáŹááşá cases áá˝áą áááş execute ááŻááşáááş
- default: áááş case áá˛áˇááž ááá°áááş execute ááŻááşáááş (optional ááąáááˇáş ááŻáśá¸áááˇáşáááş)
- Case values: Constant ááźá áşááááşá variables ááŻáśá¸áááŻáˇ áááá°á¸
- Intentional fall-through: Multiple cases áĄáá˝ááş áá°ááŽáá˛áˇ code run ááťááşáááş ááŻáśá¸áááş
- Switch vs If-Else: Equality checking áĄáá˝ááş switch, complex conditions áĄáá˝ááş if-else
- Modern switch (Java 12+): Arrow syntax, break ááááŻ, áááŻáááŻááźáŽá¸ clean
âď¸ Practice Exercise
Exercise: Traffic Light System
Traffic light color áĄááąáŤáş áá°áááşááźáŽá¸ action ááźááá˛áˇ program ááąá¸ááŤ:
- "Red" â "STOP! Wait for green light."
- "Yellow" â "SLOW DOWN! Prepare to stop."
- "Green" â "GO! Drive safely."
- Any other â "ERROR! Invalid light color."
Bonus: "red", "RED", "Red" áĄáŹá¸ááŻáśá¸ áĄááŻááşááŻááşáĄáąáŹááş ááźááşá፠(case-insensitive)
đĄ Solution ááźááˇáşáááş (Try ááŻááşááźáŽá¸ááž ááźááˇáşááŤ)
public class TrafficLight {
public static void main(String[] args) {
String light = "Yellow";
// Convert to lowercase for case-insensitive matching
String color = light.toLowerCase();
System.out.println("Traffic Light: " + light);
System.out.print("Action: ");
switch (color) {
case "red":
System.out.println("STOP! Wait for green light.");
System.out.println("â Do not cross!");
break;
case "yellow":
System.out.println("SLOW DOWN! Prepare to stop.");
System.out.println("â ď¸ Caution!");
break;
case "green":
System.out.println("GO! Drive safely.");
System.out.println("â
Safe to proceed!");
break;
default:
System.out.println("ERROR! Invalid light color.");
System.out.println("Valid colors: Red, Yellow, Green");
}
}
}
đ Quick Quiz
Question 1: Switch statement áážáŹ áááş data type áááŻáśá¸áááŻááşáá°á¸áá˛?
Question 2: Break statement áááŤáááş ááŹááźá áşááá˛?
Question 3: Default case á switch áážáŹ required ááŹá¸?