
26-12-2009, 03:30
|
 |
|
|
חבר מתאריך: 21.12.04
הודעות: 30,020
|
|
לא הבנת את השגיאה.
החריגה ArrayOutOfBoundsException שמה את הערך 1- כאשר אתה חורג מהמערך.
זה לא שהערך בתא שאתה מבקש הוא 1-.
למעשה, בג'אווה אתה לא יכול באמת לחרוג מהמערך ברמה הפיסית (ישירות לזיכרון כמו ב C או אסמבלי) ולכן אתה מקבל את החריגה הזו. אתה לא יכול לדעת מה יש בתא הבא.
אחת הדרכים לטפל בבעיה היא למצוא מה הבעיה באלגוריתם שלך שגורם לך לרוץ עוד איטרציה אחת על המערך, אפילו שכבר סיימת את הריצה עליו (האם השתמשת בלולאת for כאשר תנאי העצירה הוא i<arr.length ?)
דרך אחרת לתקן את הבעיה, היא לבדוק לפני כל איטרציה האם הערך שונה מ 1- (כלומר, האם עדיין לא חרגת מגבולות המערך).
דוגמא לשימוש שעשיתי בתוכנית שאני כתבתי, כאשר נתקלתי באותה הבעיה בדיוק:
קוד PHP:
public void actionPerformed(ActionEvent e) { if (jcbEventSelect.getSelectedIndex() != (-1)) { entry = entryList[jcbEventSelect.getSelectedIndex()]; } }
כלומר, לולא הבדיקה, הייתי מקבל 1- בערך של המערך שלי, ואז אם הייתי מנסה לגשת לתא ה 1- במערך - הייתי מקבל את החריגה בזמן הריצה - וזה גרוע. צריך למנוע את החריגות האלה, או לכל הגרוע לתפוס אותן ולטפל בהן בזמן ריצה.
|