אם תוכנית ה- Java שלך צריכה לבחור בין שתיים או שלוש פעולות, אם, אם כן, אחרת הצהרה יספיק. אולם, ה אם, אם כן, אחרת ההצהרה מתחילה להרגיש מסורבלת כשיש מספר אפשרויות שתוכנית צריכה לקבל. יש רק כל כך הרבה אחרת... אם הצהרות שתרצה להוסיף לפני שהקוד מתחיל להיראות לא מסודר. כאשר נדרשת החלטה על מספר אפשרויות, השתמש בהצהרת המתג.
הצהרת המעבר
הצהרת מתג מאפשרת לתוכנית להשוות את הערך של ביטוי לרשימת ערכים חלופיים. לדוגמה, דמיין שיש לך תפריט נפתח המכיל את המספרים 1 עד 4. תלוי באיזה מספר נבחר, אתה רוצה שהתוכנית שלך תעשה משהו שונה:
// נניח שהמשתמש בוחר את מספר 4
int menuChoice = 4;
לעבור (menuChoice)
{
תיק 1:
JOptionPane.showMessageDialog (null, "בחרת מספר 1");
לשבור;
מקרה 2:
JOptionPane.showMessageDialog (null, "בחרת מספר 2.");
לשבור;
מקרה 3:
JOptionPane.showMessageDialog (null, "בחרת את מספר 3.");
לשבור;
// אפשרות זו נבחרת מכיוון שהערך 4 תואם לערך של
// המשתנה בחר תפריט
מקרה 4: JOptionPane.showMessageDialog (null, "בחרת את מספר 4."); לשבור;
ברירת מחדל:
JOptionPane.showMessageDialog (null, "משהו השתבש!");
לשבור;
}
אם אתה מסתכל בתחביר של הצהרת המתג, עליך לשים לב לכמה דברים:
1. המשתנה המכיל את הערך שיש להשוות אליו ממוקם בראש, בתוך הסוגריים.
2. כל אפשרות חלופית מתחילה בתווית תיק. הערך שיש להשוות מול החלק העליון משתנה הבא אחריו ואחריו מעי גס. לדוגמה, מקרה 1: הוא תווית המקרה ואחריה הערך 1 - זה יכול באותה קלות להיות מקרה 123: או מקרה -9:. אתה יכול לקבל כמה אפשרויות חלופיות שאתה צריך.
3. אם אתה מסתכל על התחביר שלמעלה, האפשרות החלופית הרביעית מודגשת - תווית המקרה, הקוד שהיא מבצעת (כלומר JOptionPane) והצהרת הפסקה. הצהרת הפסקה מסמנת את סוף הקוד שצריך לבצע. אם אתה מסתכל, תראה שכל אפשרות חלופית מסתיימת בהצהרת הפסקה. חשוב מאוד לזכור להכניס את הצהרת ההפסקה. שקול את הקוד הבא:
// נניח שהמשתמש בוחר את מספר 1
int menuChoice = 1;
לעבור (menuChoice)
תיק 1:
JOptionPane.showMessageDialog (null, "בחרת מספר 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 הוא יכולת השימוש מיתרים בהצהרות מתג. היכולת להשוות ערכי מחרוזת בהצהרת מתגים יכולה להיות שימושית מאוד:
מחרוזת name = "Bob";
מתג (name.toLowerCase ())
{
מקרה "ג'ו":
JOptionPane.showMessageDialog (null, "בוקר טוב ג'ו!");
לשבור;
המקרה "מייקל":
JOptionPane.showMessageDialog (בטל, "איך הולך, מייקל?");
לשבור;
מקרה "בוב":
JOptionPane.showMessageDialog (בטל, "בוב, החבר הוותיק שלי!");
לשבור;
המקרה "בילי":
JOptionPane.showMessageDialog (null, "אחר הצהריים בילי, איך הילדים?");
לשבור;
ברירת מחדל:
JOptionPane.showMessageDialog (null, "מרוצה לפגוש אותך, ג'ון דו.");
לשבור;
}
כשמשווים שני ערכי מחרוזת, זה יכול להיות הרבה יותר קל אם תוודא שכולם באותו מקרה. השימוש בשיטת .toLowerCase פירושו שכל ערכי התוויות של המקרים יכולים להיות אותיות קטנות.
דברים שכדאי לזכור לגבי הצהרת המתג
• סוג המשתנה אליו יש להשוות חייב להיות סוג char, byte, short, int, character, byte, short, heel number, string, או enum.
• הערך שליד התווית לא יכול להיות משתנה. זה צריך להיות ביטוי תמידי (למשל, מילולי אינט, מילולי char).
• הערכים של הביטויים הקבועים בכל תוויות המקרים חייבים להיות שונים. הבא יביא לשגיאת זמן קומפילציה:
לעבור (menuChoice)
{
מקרה 323:
JOptionPane.showMessageDialog (null, "בחרת באפשרות 1.");
לשבור;
מקרה 323:
JOptionPane.showMessageDialog (null, "בחרת באפשרות 2.");
לשבור;
• יכול להיות רק תווית ברירת מחדל אחת בהצהרת מתג.
• בעת שימוש באובייקט עבור הצהרת המתגים (למשל מחרוזת, מספר שלם, תו) וודא שהוא אינו בטל. אובייקט null יביא לשגיאת זמן ריצה כאשר הצהרת המתגים מתבצעת.