
123 כשם מתקבלת בלי בעיה, כי גם זה טקסט.ABC לשדה הגיל גורמת לחריגה בשם InputMismatchException, והתוכנית קורסת.12.5 לשדה הגיל גורמת לאותה חריגה, כי nextInt() מקבל רק מספר שלם.הטקסט המלא של הדקות הראשונות בהרצאה «Avoid Mismatch Input» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
לפעמים קורה מצב שאנחנו רוצים לקלוט מהיוזר איזשהו נתון והיוזר מכניס נתון אחר לגמרי ודבר כזה יכול לגרום פשוט לקריסת התוכנית. בואו נראה מה הכוונה.
נניח שאנחנו באים ליוזר ואנחנו אומרים לו please enter your name, בואו נניח קודם כל ויש לנו כאן stream name שווה console read, סליחה next line, יש לנו please enter your h int h console next int נציג אותם הנה ה-name והנה ה-h תמיד כשאתם בודקים משהו בשביל לחפש שגיאות קודם כל תריצו ותראו שזה עובד כמו שצריך רק אחר
כך תנסו להכניס מקרי קצה ולראות האם התוכנית קורסת במצבים מסוימים אבל לא מתחילים קודם כל לבדוק שגיאות קודם כל בודקים שהכל עובד. נריץ, נכניס מוישה 20, הכל עובד.
אנחנו צריכים טיפה פה אולי לסדר את זה, והנה יש לנו מוישה 20 והכל יותר אסתטי. עכשיו אם נניח אני רוצה במקום מוישה להכניס 123 במקום השם, האם המערכת תסכים לקבל את זה?
אז התשובה היא כן, מפני ש-123 זה גם סטרינג, ולכן היא תגיד לי בסדר, זה השם שלך בוא תכניס לי את ה-age הנה ה-age והכל בסדר אבל מה קורה אם נעשה הפוך? כלומר מה קורה אם היוזר ינסה להכניס מחרוזת במקום ה-age?
נקסט ליין הצליחה לקרוא כל שורה גם אם היא מספרים. יכול להיות שזה לא דבר שמתאים לנו בקוד ואיך לפתור את זה זה פשוט עוד קוד שאנחנו צריכים לכתוב מבחינה לוגית, לבצע בדיקות האם זה מספר ולא מכרוזת שמכילה רק אותיות אבל איך לעשות בדיקות אנחנו נלמד בהמשך.
כרגע בואו נראה מה קורה אם אנחנו עושים הפוך. יוזר הכניס מוישה ואז ב-age הוא הכניס מכרוזת שהיא לא מספר לדוגמה ABC. בואו נרווח רגע את הקונסול ונלחץ enter ועכשיו מה שקרה זה משהו שנקרא אקספשן או חריגה או קריסה של התוכנית.
למעשה יש איזשהו מצב בעייתי כאן שבגללו התוכנית קרסה, יכלנו לטפל במצב הזה ולמנוע את הקריסה כך שעדיין התבצעה חריגה או אקספשן, זה המצב הבעייתי הזה, אבל התוכנית יכלה לא לקרוס.
אם אנחנו לא טיפלנו במצב הזה אז התוכנית קרסה. כשיש חריגה או אקספשן ולא טיפלנו בה, התוכנית קורסת.
כשיש חריגה או אקספשן וכן טיפלנו בה, התוכנית לא קורסת. כאשר התוכנית קורסת אנחנו רואים את האדום הזה ויש פה תיאור לגבי מה הבעיה.
אנחנו רואים שהבעיה הייתה בפונקציית המיין וכתוב פה גם שהבעיה נקראת input input mismatch exception וכתוב לנו אפילו בדיוק באיזה שורה הבעיה קרתה אנחנו יכולים ללחוץ עליה ולראות בדיוק שהוא מפנה אותנו לשורה הזאת והוא אומר לנו תקשיבו יש פה איזשהו input mismatch הוא לא נתן לנו מעבר לזה נתונים אבל אנחנו צריכים להבין שאנחנו דרשנו מהיוזר להכניס איזשהו מספר אינטג'רי והיוזר לא עשה
את זה הכניס משהו אחר שהוא לא אינטג'רי הנה אנחנו רואים את ה-abc. בגלל שלא טיפלנו בבעיה, אז התוכנית קרסה. ברגע שיש קריסה, התוכנית לא ממשיכה הלאה. אנחנו יכולים לראות שאת ה-Name וה-Age הזה התוכנית לא הציגה.
אפילו שהיא יכלה להציג את ה-Name, היא מיידית מפסיקה. איך לטפל בזה, זה מחוץ לקורס הזה, מפני שבשביל באמת להבין איך לטפל בקריסות, אתם צריכים קודם כל ללמוד את הקורס של Object Oriented, ורק לאחר מכן ללמוד Advanced Java, קצת נושאים יותר מתקדמים, ששם משתמשים בקונספט של
Object Oriented בשביל להבין איך באמת לטפל בבעיה. אז בואו נראה קודם כל אם כאשר אנחנו מריצים ומכניסים לדוגמה גם מספר עשרוני, התוכנית קורסת.
נניח שהיוזר אומר שהוא בין 12 וחצי, גם כאן אנחנו רואים input mismatch exception והתוכנית בעצם קורסת.