לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 26-12-2009, 03:30
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 1 שנכתבה על ידי rl_21 שמתחילה ב "שגיאה בJAVA, לא מבין למה ואיך זה מגיע למצב הזה"

לא הבנת את השגיאה.
החריגה 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- במערך - הייתי מקבל את החריגה בזמן הריצה - וזה גרוע. צריך למנוע את החריגות האלה, או לכל הגרוע לתפוס אותן ולטפל בהן בזמן ריצה.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 26-12-2009, 18:07
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 4 שנכתבה על ידי rl_21 שמתחילה ב "תגובה לשניכם: קודם כל תודה,..."

אני שוב מסביר - כאשר אתה עושה יותר מדי איטרציות ואתה חורג מגודל המערך - אתה מקבל את הערך "1-".
זה לא שבאמת הערך בתא מספר 10 (התא האחד-עשרה כי מתחילים לספור מאפס) הוא 1-, אלא זה בא לציין שחרגת מגודל המערך.

למה שלא תעשה פשוט תנאי if שאומר:
קוד PHP:
 if (sheerit != (-1))
{
  ...


וזהו?
זה יבטיח שאם אתה חורג מגבולות המערך - אז אל תבצע את השורה הבעייתית (שהיא חריגה מגבול המערך).
או - שמראש תעשה את הלולאה שלך כמו שצריך... יש לך בעיה בתנאי הלולאה.. לא סתם אתה מגיע לחריגה הזו... אם התנאי שלך בלולאה היה כמו שצריך - זה לא היה קורה.
בכל מקרה - תנאי ה IF אמור לפתור לך את הבעיה... אתה אמנם תגדיל את האינדקס כך שיחרוג, אבל לפחות לא תבצע שום פעולה איתו והתוכנית לא תזרוק לך חריגות.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 00:45

הדף נוצר ב 0.03 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר