Hvis dit Java-program skal vælge mellem to eller tre handlinger, skal en hvis, så ellers udmelding vil være tilstrækkelig. Dog hvis, så ellers udsagn begynder at føles besværlig, når der er et antal valg, et program muligvis skal træffe. Der er kun så mange ellers... hvis udsagn, som du vil tilføje, før koden begynder at se utydelig. Når der kræves en beslutning på tværs af flere indstillinger, skal du bruge switch-erklæringen.
Skifterklæringen
En switch-sætning giver et program mulighed for at sammenligne værdien af en ekspression til en liste over alternative værdier. Forestil dig for eksempel, at du havde en rullemenu, der indeholdt numrene 1 til 4. Afhængigt af hvilket nummer der vælges, ønsker du, at dit program skal gøre noget andet:
// Lad os sige, at brugeren vælger nummer 4
int menuChoice = 4;
switch (menuChoice)
{
sag 1:
JOptionPane.showMessageDialog (null, "Du valgte nummer 1.");
pause;
sag 2:
JOptionPane.showMessageDialog (null, "Du valgte nummer 2.");
pause;
sag 3:
JOptionPane.showMessageDialog (null, "Du valgte nummer 3.");
pause;
// Denne indstilling vælges, fordi værdien 4 matcher værdien af
// menuen Vælg variabel
sag 4: JOptionPane.showMessageDialog (null, "Du valgte nummer 4."); pause;
Standard:
JOptionPane.showMessageDialog (null, "Der gik noget galt!");
pause;
}
Hvis du ser på syntaksen i switch-erklæringen, skal du bemærke et par ting:
1. Variablen, der indeholder den værdi, der skal sammenlignes med, placeres øverst inde i parenteserne.
2. Hver alternativ mulighed starter med en etiket. Værdien, der skal sammenlignes med toppen variabel kommer næste, efterfulgt af et kolon. F.eks. Er sag 1: er etiketten efterfulgt af værdien 1 - det kan lige så let være tilfældet 123: eller sag -9:. Du kan have så mange alternative muligheder, som du har brug for.
3. Hvis du ser på den ovennævnte syntaks, fremhæves den fjerde alternative indstilling - sagetiketten, koden, den udfører (dvs. JOptionPane), og en brudserklæring. Break-sætningen signaliserer slutningen af koden, der skal udføres. Hvis du ser, vil du se, at enhver alternativ mulighed ender med en pauseanvisning. Det er meget vigtigt at huske at indsætte pausedeklarationen. Overvej følgende kode:
// lad os sige, at brugeren vælger nummer 1
int menuChoice = 1;
switch (menuChoice)
sag 1:
JOptionPane.showMessageDialog (null, "Du valgte nummer 1.");
sag 2:
JOptionPane.showMessageDialog (null, "Du valgte nummer 2.");
pause;
sag 3:
JOptionPane.showMessageDialog (null, "Du valgte nummer 3.");
pause;
sag 4:
JOptionPane.showMessageDialog (null, "Du valgte nummer 4.");
pause;
Standard:
JOptionPane.showMessageDialog (null, "Der gik noget galt!");
pause;
}
Hvad du forventer at ske, er at se en dialog boks der siger "Du valgte nummer 1", men fordi der ikke er nogen brudserklæring, der matcher den første sags etiket, udføres koden i den anden sags etiket også. Dette betyder, at den næste dialogboks der siger "Du valgte nummer 2" også vises.
4. Der er en standardetiket nederst i switch-erklæringen. Dette er som et sikkerhedsnet i tilfælde af, at ingen af værdierne på sagetiketterne matcher den værdi, der sammenlignes med den. Det er meget nyttigt at give en måde at udføre kode på, når ingen af de ønskede indstillinger vælges.
Hvis du altid forventer, at en af de andre indstillinger vælges, kan du udelade standardetiketten, men at sætte en i slutningen af hver switch-erklæring, du opretter, er en god vane at komme ind på. Det kan synes usandsynligt, at den nogensinde vil blive brugt, men fejl kan krybe ind i koden, og det kan hjælpe med at fange en fejl.
Siden JDK 7
En af ændringerne i Java-syntaxen med frigivelsen af JDK 7 er evnen til at bruge Strenge i switch-udsagn. At kunne sammenligne strengværdier i en switch-sætning kan være meget praktisk:
String name = "Bob";
switch (name.toLowerCase ())
{
sag "joe":
JOptionPane.showMessageDialog (null, "God morgen, Joe!");
pause;
sag "michael":
JOptionPane.showMessageDialog (null, "Hvordan går det, Michael?");
pause;
sag "bob":
JOptionPane.showMessageDialog (null, "Bob, min gamle ven!");
pause;
sag "billy":
JOptionPane.showMessageDialog (null, "Eftermiddag Billy, hvordan har børnene det?");
pause;
Standard:
JOptionPane.showMessageDialog (null, "Tilfreds med at møde dig, John Doe.");
pause;
}
Når du sammenligner to strengværdier, kan det være meget lettere, hvis du sørger for, at de alle er i samme tilfælde. Brug af .toLowerCase-metoden betyder, at alle etiketværdier kan være i små bogstaver.
Ting at huske på skifteerklæringen
• Typen af variablen, der skal sammenlignes med, skal være en type char, byte, kort, int, karakter, byte, kort, heltal, streng eller enum.
• Værdien ved siden af etiketmærket kan ikke være en variabel. Det skal være et konstant udtryk (f.eks. En int literal, en char literal).
• Værdierne for de konstante udtryk på tværs af alle sagetiketter skal være forskellige. Følgende ville resultere i en kompileringstid-fejl:
switch (menuChoice)
{
sag 323:
JOptionPane.showMessageDialog (null, "Du valgte mulighed 1.");
pause;
sag 323:
JOptionPane.showMessageDialog (null, "Du valgte mulighed 2.");
pause;
• Der kan kun være en standardetiket i en switch-erklæring.
• Når du bruger et objekt til switch-sætningen (f.eks. Streng, heltal, karakter), skal du sikre dig, at det ikke er nul. Et null-objekt resulterer i en runtime-fejl, når switch-sætningen udføres.