Εάν το πρόγραμμά σας Java πρέπει να κάνει επιλογή μεταξύ δύο ή τριών ενεργειών, ένα αν, λοιπόν, αλλιώς δήλωση θα αρκεί. Ωστόσο, το αν, λοιπόν, αλλιώς η δήλωση αρχίζει να αισθάνεται δυσκίνητη όταν υπάρχουν πολλές επιλογές που μπορεί να χρειαστεί να κάνει ένα πρόγραμμα. Υπάρχουν μόνο τόσα πολλά αλλού... εάν δηλώσεις που θέλετε να προσθέσετε πριν ο κώδικας αρχίσει να φαίνεται ακατάλληλος. Όταν απαιτείται μια απόφαση για πολλαπλές επιλογές, χρησιμοποιήστε τη δήλωση διακόπτη.
Η δήλωση διακόπτη
Μια εντολή διακόπτη επιτρέπει σε ένα πρόγραμμα την ικανότητα να συγκρίνει την τιμή ενός έκφραση σε μια λίστα εναλλακτικών τιμών. Για παράδειγμα, φανταστείτε ότι είχατε ένα αναπτυσσόμενο μενού που περιείχε τους αριθμούς 1 έως 4. Ανάλογα με τον αριθμό που επιλέξατε, θέλετε το πρόγραμμά σας να κάνει κάτι διαφορετικό:
// ας πούμε ότι ο χρήστης επιλέγει τον αριθμό 4
int menuChoice = 4;
διακόπτης (menuChoice)
{
περίπτωση 1:
JOptionPane.showMessageDialog (μηδέν, "Επιλέξατε τον αριθμό 1.");
Διακοπή;
περίπτωση 2:
JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 2.");
Διακοπή;
περίπτωση 3:
JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 3.");
Διακοπή;
// Αυτή η επιλογή επιλέγεται επειδή η τιμή 4 αντιστοιχεί στην τιμή του
// τη μεταβλητή menuChoise
περίπτωση 4: JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 4."); Διακοπή;
Προκαθορισμένο:
JOptionPane.showMessageDialog (null, "Κάτι πήγε στραβά!");
Διακοπή;
}
Αν κοιτάξετε τη σύνταξη της εντολής διακόπτη θα πρέπει να παρατηρήσετε μερικά πράγματα:
1. Η μεταβλητή που περιέχει την τιμή που πρέπει να συγκριθεί με τοποθετείται στην κορυφή, μέσα στις αγκύλες.
2. Κάθε εναλλακτική επιλογή ξεκινά με μια ετικέτα υπόθεση. Η τιμή που πρέπει να συγκριθεί με την κορυφή μεταβλητός έρχεται στη συνέχεια, ακολουθούμενο από ένα παχύ έντερο. Για παράδειγμα, η περίπτωση 1: είναι η ετικέτα περίπτωσης ακολουθούμενη από την τιμή 1 - θα μπορούσε να είναι εξίσου εύκολα περίπτωση 123: ή περίπτωση -9:. Μπορείτε να έχετε όσες εναλλακτικές επιλογές χρειάζεστε.
3. Εάν κοιτάξετε την παραπάνω σύνταξη, επισημαίνεται η τέταρτη εναλλακτική επιλογή - η ετικέτα της υπόθεσης, ο κώδικας που εκτελείται (δηλ. Το JOptionPane) και μια εντολή διαλείμματος. Η εντολή διακοπής σηματοδοτεί το τέλος του κώδικα που πρέπει να εκτελεστεί. Αν κοιτάξετε, θα δείτε ότι κάθε εναλλακτική επιλογή τελειώνει με μια εντολή διακοπής. Είναι πολύ σημαντικό να θυμηθείτε να βάλετε τη δήλωση σπασίματος. Εξετάστε τον ακόλουθο κώδικα:
// ας πούμε ότι ο χρήστης επιλέγει τον αριθμό 1
int menuChoice = 1;
διακόπτης (menuChoice)
περίπτωση 1:
JOptionPane.showMessageDialog (μηδέν, "Επιλέξατε τον αριθμό 1.");
περίπτωση 2:
JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 2.");
Διακοπή;
περίπτωση 3:
JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 3.");
Διακοπή;
περίπτωση 4:
JOptionPane.showMessageDialog (null, "Επιλέξατε τον αριθμό 4.");
Διακοπή;
Προκαθορισμένο:
JOptionPane.showMessageDialog (null, "Κάτι πήγε στραβά!");
Διακοπή;
}
Αυτό που περιμένετε να συμβεί είναι να δείτε ένα κουτί διαλόγου λέγοντας "Επιλέξατε τον αριθμό 1", αλλά επειδή δεν υπάρχει δήλωση σπασίματος που να ταιριάζει με την πρώτη ετικέτα περίπτωση, ο κώδικας στην δεύτερη ετικέτα υπόθεση επίσης εκτελείται. Αυτό σημαίνει ότι θα εμφανιστεί και το επόμενο πλαίσιο διαλόγου "Επιλέξατε τον αριθμό 2".
4. Υπάρχει μια προεπιλεγμένη ετικέτα στο κάτω μέρος της εντολής διακόπτη. Αυτό είναι σαν ένα δίχτυ ασφαλείας σε περίπτωση που καμία από τις τιμές των ετικετών των περιπτώσεων δεν ταιριάζει με την τιμή που συγκρίνεται με αυτήν. Είναι πολύ χρήσιμο να παρέχετε έναν τρόπο εκτέλεσης κώδικα όταν δεν επιλέγεται καμία από τις επιθυμητές επιλογές.
Εάν περιμένετε πάντα μία από τις άλλες επιλογές που θα επιλεχθούν, τότε μπορείτε να αφήσετε την προεπιλεγμένη ετικέτα, αλλά να βάλεις ένα στο τέλος κάθε εντολής διακόπτη που δημιουργείτε είναι μια καλή συνήθεια να μπεις. Μπορεί να φαίνεται απίθανο ότι θα χρησιμοποιηθεί ποτέ, αλλά τα λάθη μπορούν να γλιστρήσουν στον κώδικα και μπορεί να βοηθήσουν να πιάσουν ένα λάθος.
Από το JDK 7
Μία από τις αλλαγές στη σύνταξη Java με την έκδοση του JDK 7 είναι η δυνατότητα χρήσης Χορδές σε καταστάσεις μεταγωγής. Η δυνατότητα σύγκρισης των τιμών String σε μια εντολή διακόπτη μπορεί να είναι πολύ βολική:
Όνομα συμβολοσειράς = "Bob";
διακόπτης (name.toLowerCase ())
{
περίπτωση "joe":
JOptionPane.showMessageDialog (null, "Καλημέρα, Joe!");
Διακοπή;
περίπτωση "michael":
JOptionPane.showMessageDialog (null, "Πώς πηγαίνει, Michael;");
Διακοπή;
περίπτωση "bob":
JOptionPane.showMessageDialog (null, "Bob, ο παλιός μου φίλος!");
Διακοπή;
περίπτωση "billy":
JOptionPane.showMessageDialog (null, "Απόγευμα Μπίλι, πώς είναι τα παιδιά;");
Διακοπή;
Προκαθορισμένο:
JOptionPane.showMessageDialog (μηδέν, "Χαίρομαι που σε γνωρίζω, John Doe.");
Διακοπή;
}
Όταν συγκρίνουμε δύο τιμές String, μπορεί να είναι πολύ πιο εύκολο αν βεβαιωθείτε ότι είναι όλοι στην ίδια περίπτωση. Χρησιμοποιώντας τη μέθοδο .toLowerCase, όλες οι τιμές της ετικέτας μπορεί να είναι πεζά.
Πράγματα που πρέπει να θυμάστε σχετικά με τη δήλωση διακόπτη
• Ο τύπος της μεταβλητής που πρέπει να συγκριθεί πρέπει να είναι ένας χαρακτήρας char, byte, short, int, Character, Byte, Short, Integer, String ή enum.
• Η τιμή δίπλα στην ετικέτα υπόθεση δεν μπορεί να είναι μια μεταβλητή. Πρέπει να είναι μια σταθερή έκφραση (π.χ., μια λέξη int, μια γραμματική γραμματική).
• Οι τιμές των σταθερών εκφράσεων σε όλες τις ετικέτες των περιπτώσεων πρέπει να είναι διαφορετικές. Τα παρακάτω θα είχαν ως αποτέλεσμα ένα σφάλμα κατάρτισής:
διακόπτης (menuChoice)
{
περίπτωση 323:
JOptionPane.showMessageDialog (null, "Επιλέξατε την επιλογή 1.");
Διακοπή;
περίπτωση 323:
JOptionPane.showMessageDialog (null, "Επιλέξατε την επιλογή 2.");
Διακοπή;
• Σε μια εντολή διακόπτη μπορεί να υπάρχει μόνο μία προεπιλεγμένη ετικέτα.
• Όταν χρησιμοποιείτε ένα αντικείμενο για την εντολή switch (π.χ. String, Integer, Character) βεβαιωθείτε ότι δεν είναι null. Ένα null αντικείμενο θα έχει ως αποτέλεσμα ένα σφάλμα χρόνου εκτέλεσης όταν εκτελείται η εντολή switch.