Ha Java programjának választania kell két vagy három művelet között, egy ha, akkor másként nyilatkozat elegendő lesz. Azonban a ha, akkor másként A nyilatkozat nehézkessé válik, amikor számos választási lehetőséget lehet elvégezni egy program számára. Csak annyi van mást... ha utasításokat, amelyeket hozzá szeretne adni, mielőtt a kód rendetlennek tűnik. Ha több lehetőség közötti döntésre van szükség, akkor használja a kapcsolót.
A váltási nyilatkozat
A kapcsoló utasítás lehetővé teszi a program számára, hogy összehasonlítsa az an értékét kifejezés az alternatív értékek listájához. Például, képzelje el, hogy van egy legördülő menü, amely az 1-4 számokat tartalmazza. Attól függően, hogy melyik számot választja, azt akarja, hogy a programja valami mást tegyen:
// Tegyük fel, hogy a felhasználó a 4. számot választja
int menuChoice = 4;
kapcsoló (menuChoice)
{
1. eset:
JOptionPane.showMessageDialog (null, "Ön az 1. számot választotta");
szünet;
2. eset:
JOptionPane.showMessageDialog (null, "Ön a 2. számot választotta");
szünet;
3. eset:
JOptionPane.showMessageDialog (null, "Ön a 3. számot választotta");
szünet;
// Ezt az opciót választják, mert a 4. érték megegyezik a
// a menuChoise változó
4. eset: JOptionPane.showMessageDialog (null, "Ön a 4. számot választotta"); szünet;
alapértelmezett:
JOptionPane.showMessageDialog (null: "Valami rosszra ment!");
szünet;
}
Ha megnézzük a switch utasítás szintaxisát, észre kell vennie néhány dolgot:
1. A változó, amely tartalmazza az összehasonlítandó értéket, tetején, a zárójelben található.
2. Minden alternatív lehetőség esetcímkével kezdődik. A tetejéhez viszonyított érték változó jön a következő, majd egy kettőspont követ. Például az 1. eset: az esetcímke, amelyet az 1-es érték követ - ugyanolyan könnyen lehet a 123. eset: vagy a -9: eset. Annyi alternatív lehetősége van, amennyire szüksége van.
3. Ha megnézzük a fenti szintaxist, akkor a negyedik alternatív lehetőség kerül kiemelésre - az esetcímke, a végrehajtott kód (azaz a JOptionPane) és a break utasítás. A törésjelzés jelzi a végrehajtandó kód végét. Ha megnézed, látni fogod, hogy minden alternatív lehetőség törésnyilatkozattal ér véget. Nagyon fontos, hogy ne felejtsük el beilleszteni a szünetet. Vegye figyelembe a következő kódot:
// Tegyük fel, hogy a felhasználó az 1. számot választja
int menuChoice = 1;
kapcsoló (menuChoice)
1. eset:
JOptionPane.showMessageDialog (null, "Ön az 1. számot választotta");
2. eset:
JOptionPane.showMessageDialog (null, "Ön a 2. számot választotta");
szünet;
3. eset:
JOptionPane.showMessageDialog (null, "Ön a 3. számot választotta");
szünet;
4. eset:
JOptionPane.showMessageDialog (null, "Ön a 4. számot választotta");
szünet;
alapértelmezett:
JOptionPane.showMessageDialog (null: "Valami rosszra ment!");
szünet;
}
Amire számíthat, hogy megtörténik, látni fogja a párbeszédablak mondván: "Az 1-es számot választotta", de mivel nincs törési utasítás, amely megegyezik az első esetcímkével, a második esetcímke kódja is végrehajtásra kerül. Ez azt jelenti, hogy a következő párbeszédpanel, amelyben a "2-es számot választotta" feliratot is megjelenik.
4. A kapcsoló utasítás alján található egy alapértelmezett címke. Ez olyan, mint egy biztonsági háló, ha a tokcímkék egyik értéke sem felel meg a vele összehasonlítandó értéknek. Nagyon hasznos a kód végrehajtásának módja, ha a kívánt opciók egyikét nem választja.
Ha mindig arra számít, hogy az egyik másik opciót választja, akkor hagyhatja ki az alapértelmezett címkét, de jó, ha minden létrehozott kapcsoló utasítás végére elteszi az egyiket, ez jó szokás. Valószínűtlennek tűnhet, hogy valaha is használják, de a hibák beleakadhatnak a kódba, és elősegíthetik a hiba elhárítását.
A JDK 7 óta
A Java szintaxisának egyik változása a JDK 7 kiadásával a használat képessége Strings kapcsoló nyilatkozatokban. Nagyon hasznos lehet az, ha összehasonlíthatjuk a karakterlánc értékeit a kapcsoló utasításban:
Karakterlánc neve = "Bob";
kapcsoló (név.toLowerCase ())
{
"joe" eset:
JOptionPane.showMessageDialog (nulla, "Jó reggelt, Joe!");
szünet;
"michael" eset:
JOptionPane.showMessageDialog (nulla, "Hogy megy, Michael?");
szünet;
"bob" eset:
JOptionPane.showMessageDialog (nulla, "Bob, régi barátom!");
szünet;
"billy" eset:
JOptionPane.showMessageDialog (nulla, "Délutáni Billy, hogy vannak a gyerekek?");
szünet;
alapértelmezett:
JOptionPane.showMessageDialog (nulla, "Örülök, hogy találkozhatunk, John Doe.");
szünet;
}
Két karakterláncérték összehasonlításakor sokkal könnyebb lehet, ha megbizonyosodik arról, hogy ezek mind ugyanabban az esetben vannak-e. A .toLowerCase módszer használata azt jelenti, hogy az esetcímke-értékek lehetnek benne kisbetű.
Emlékezzen a kapcsolóról szóló nyilatkozatra
• Az összehasonlítandó változó típusának char, byte, short, int, Character, Byte, Short, Integer, String vagy enum típusúnak kell lennie.
• Az esetcímke melletti érték nem lehet változó. Állandó kifejezésnek kell lennie (pl. Int literál, char literál).
• Az állandó kifejezések értékeinek minden esetcímke között különböznie kell. A következő fordítási idő hibát eredményezne:
kapcsoló (menuChoice)
{
323. eset:
JOptionPane.showMessageDialog (null, "Ön az 1. opciót választotta");
szünet;
323. eset:
JOptionPane.showMessageDialog (null, "Ön a 2. lehetőséget választotta");
szünet;
• A kapcsoló utasításban csak egy alapértelmezett címke lehet.
• Ha egy objektumot használ a kapcsoló utasításhoz (például karakterlánc, egész szám, karakter), akkor ellenőrizze, hogy az nem nulla. A null objektum futási hibát eredményez, amikor a kapcsoló utasítás végrehajtásra kerül.