Αντί να χρησιμοποιείτε αρκετές δομές if…else, μπορείτε να χρησιμοποιήσετε τη δομή switch.
Η δομή switch επιλέγει έναν από τα πολλάπλα τμήματα κώδικα που θα εκτελεστούν, ανάλογα με την τιμή μιας μεταβλητής ή μιας έκφρασης. Συγκεκριμένα, με τη δομή switch μπορείτε να ορίσετε πολλαπλά περιστατικά εκτέλεσης κώδικα και να επιλέξετε ποιο από αυτά θα εκτελεστεί, βάσει της τιμής ενός ελέγχου. Αυτή η προσέγγιση μπορεί να είναι πιο συνοπτική και ευανάγνωστη από τη χρήση πολλαπλών δηλώσεων if…else.
Έτσι, αν έχετε μια μεταβλητή ή μια έκφραση που θέλετε να ελέγξετε για διάφορες πιθανές τιμές και να εκτελέσετε αντίστοιχο κώδικα για κάθε περίπτωση, η δομή switch μπορεί να είναι μια πρακτική και καθαρή λύση.
Σύνταξη:
switch(expression) { case x: // μπλοκ κώδικα break; case y: // μπλοκ κώδικα break; default: // μπλοκ κώδικα }
Η expression
είναι μια μεταβλητή που θα ελεγχθεί στην εντολή switch και οι case
είναι οι διαφορετικές τιμές που μπορεί να έχει αυτή η μεταβλητή. Αν η τιμή της μεταβλητής expression
ταιριάζει με μία από τις τιμές των case
, τότε θα εκτελεστεί το αντίστοιχο μπλοκ κώδικα. Η εντολή break
χρησιμοποιείται για να σταματήσει η εκτέλεση της switch.
Η εντολή default
εκτελείται όταν καμία από τις τιμές των case
δεν ταιριάζει με την τιμή της μεταβλητής expression
.
Παρακάτω είναι ένα παράδειγμα χρήσης της εντολής switch:
int day = 3; // Ορισμός μεταβλητής day με τιμή 3 String dayName; // Δημιουργία μεταβλητής dayName τύπου String switch (day) { // Έναρξη switch statement με βάση την τιμή της μεταβλητής day case 1: // Αν η τιμή της μεταβλητής day είναι 1 dayName = "Monday"; // Ορισμός της μεταβλητής dayName ως "Monday" break; // Έξοδος από το switch statement case 2: // Αν η τιμή της μεταβλητής day είναι 2 dayName = "Tuesday"; // Ορισμός της μεταβλητής dayName ως "Tuesday" break; // Έξοδος από το switch statement case 3: // Αν η τιμή της μεταβλητής day είναι 3 dayName = "Wednesday"; // Ορισμός της μεταβλητής dayName ως "Wednesday" break; // Έξοδος από το switch statement case 4: // Αν η τιμή της μεταβλητής day είναι 4 dayName = "Thursday"; // Ορισμός της μεταβλητής dayName ως "Thursday" break; // Έξοδος από το switch statement case 5: // Αν η τιμή της μεταβλητής day είναι 5 dayName = "Friday"; // Ορισμός της μεταβλητής dayName ως "Friday" break; // Έξοδος από το switch statement case 6: // Αν η τιμή της μεταβλητής day είναι 6 dayName = "Saturday"; // Ορισμός της μεταβλητής dayName ως "Saturday" break; // Έξοδος από το switch statement case 7: // Αν η τιμή της μεταβλητής day είναι 7 dayName = "Sunday"; // Ορισμός της μεταβλητής dayName ως "Sunday" break; // Έξοδος από το switch statement default: // Αν η τιμή της μεταβλητής day δεν ταιριάζει με καμία από τις προηγούμενες περιπτώσεις dayName = "Invalid day"; // Ορισμός της μεταβλητής dayName ως "Invalid day" break; // Έξοδος από το switch statement } System.out.println(dayName); // Εκτύπωση της τιμής της μεταβλητής dayName στην οθόνη
Ο παραπάνω κώδικας εκτελεί μια συγκεκριμένη λογική βασιζόμενος στην τιμή της μεταβλητής day
. Ακολουθούν τα βήματα που περιγράφονται από τον κώδικα:
- Ορίζεται μια μεταβλητή
day
με τιμή 3. - Δημιουργείται μια μεταβλητή
dayName
χωρίς αρχική τιμή. - Ξεκινά η δομή επιλογής
switch
βασισμένη στην τιμή της μεταβλητήςday
. - Ελέγχεται η τιμή της μεταβλητής
day
και εκτελείται ο κώδικας που αντιστοιχεί στη συγκεκριμένη τιμή. - Στην περίπτωση που η τιμή της μεταβλητής
day
είναι 3, η μεταβλητήdayName
ορίζεται ως “Wednesday” (Τετάρτη). - Η εκτέλεση του κώδικα συνεχίζεται από το σημείο όπου βρίσκεται ο καθένας από τους
break
statements στον κώδικα. - Η τιμή της μεταβλητής
dayName
εκτυπώνεται στην οθόνη χρησιμοποιώντας τη μέθοδοSystem.out.println()
. - Στην περίπτωση αυτή, θα εμφανιστεί στην οθόνη η λέξη “Wednesday”.
Συνολικά, ο κώδικας αυτός αναθέτει στη μεταβλητή dayName
την ονομασία μιας ημέρας της εβδομάδας με βάση την τιμή της μεταβλητής day
και εμφανίζει την τιμή αυτήν στην οθόνη.
Αν η τιμή της μεταβλητής day
είναι 3, το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι:
Wednesday
Αυτό συμβαίνει επειδή η μεταβλητή day
έχει τιμή 3 και ο κώδικας εκχωρεί στη μεταβλητή dayName
την αντίστοιχη ονομασία της ημέρας, δηλαδή “Wednesday”. Έπειτα, η τιμή της μεταβλητής dayName
εμφανίζεται στην οθόνη με τη χρήση της System.out.println()
.
[adinserter block=”2″]
Όταν η Java φτάνει σε μια εντολή break
εντός ενός switch
block, αυτό σημαίνει ότι η εκτέλεση του block διακόπτεται.
Αυτό έχει ως αποτέλεσμα να μην εκτελεστούν περαιτέρω εντολές και να μην ελεγχθούν άλλες περιπτώσεις μέσα στο block.
Όταν βρεθεί αληθή συνθήκη και ολοκληρωθεί η αντίστοιχη εργασία, είναι κατάλληλο να χρησιμοποιήσουμε την εντολή break
για να διακόψουμε την εκτέλεση του switch
. Δεν είναι απαραίτητο να εκτελεστούν άλλες περιπτώσεις καθώς έχει επιτευχθεί η αντίστοιχη λειτουργία.
Συνήθως τοποθετούμε την εντολή break
στο τέλος κάθε block κώδικα εντός του switch
για να διακόψουμε την εκτέλεση του switch
.
Η εντολή default
καθορίζει έναν κώδικα που θα εκτελεστεί εάν καμία από οι συνθήκες (case
) σε μια δομή επιλογής switch
δεν είναι αληθείς.
int day = 8; // Ορισμός μεταβλητής day με τιμή 8 String dayName; // Δήλωση μεταβλητής dayName τύπου String switch (day) { // Εκτέλεση ενός switch statement με βάση την τιμή της μεταβλητής day case 1: // Αν η τιμή της μεταβλητής day είναι 1 dayName = "Monday"; // Ορισμός της μεταβλητής dayName ως "Monday" break; // Έξοδος από το switch statement case 2: // Αν η τιμή της μεταβλητής day είναι 2 dayName = "Tuesday"; // Ορισμός της μεταβλητής dayName ως "Tuesday" break; // Έξοδος από το switch statement case 3: // Αν η τιμή της μεταβλητής day είναι 3 dayName = "Wednesday"; // Ορισμός της μεταβλητής dayName ως "Wednesday" break; // Έξοδος από το switch statement case 4: // Αν η τιμή της μεταβλητής day είναι 4 dayName = "Thursday"; // Ορισμός της μεταβλητής dayName ως "Thursday" break; // Έξοδος από το switch statement case 5: // Αν η τιμή της μεταβλητής day είναι 5 dayName = "Friday"; // Ορισμός της μεταβλητής dayName ως "Friday" break; // Έξοδος από το switch statement case 6: // Αν η τιμή της μεταβλητής day είναι 6 dayName = "Saturday"; // Ορισμός της μεταβλητής dayName ως "Saturday" break; // Έξοδος από το switch statement case 7: // Αν η τιμή της μεταβλητής day είναι 7 dayName = "Sunday"; // Ορισμός της μεταβλητής dayName ως "Sunday" break; // Έξοδος από το switch statement default: // Αν η τιμή της μεταβλητής day δεν ταιριάζει με καμία από τις παραπάνω περιπτώσεις dayName = "Invalid day"; // Ορισμός της μεταβλητής dayName ως "Invalid day" break; // Έξοδος από το switch statement } System.out.println(dayName); // Εκτύπωση της τιμής της μεταβλητής dayName
Ο κώδικας αυτός χρησιμοποιεί ένα switch statement για να επιλέξει την κατάλληλη ημέρα (dayName) με βάση την τιμή της μεταβλητής day
. Η τιμή της μεταβλητής day
έχει οριστεί ως 8.
Ο κώδικας αρχικά ελέγχει την τιμή της μεταβλητής day
και εκτελεί τον κώδικα μέσα στην περίπτωση (case) που ταιριάζει με την τιμή της day
. Στη συγκεκριμένη περίπτωση, καθώς η τιμή της day
είναι 8 και δεν υπάρχει περίπτωση (case) για την τιμή αυτή, εκτελείται η περίπτωση (default) που ορίζει την τιμή της μεταβλητής dayName
ως “Invalid day”.
Στη συνέχεια, η τιμή της μεταβλητής dayName
εκτυπώνεται στην οθόνη μέσω της εντολής System.out.println(dayName);
.
Άρα, στην περίπτωση αυτή, θα εμφανιστεί στην οθόνη το μήνυμα “Invalid day”.