פורסם 2012 באפריל 1313 שנים יש לי 2 מקטעים, כל מקטע מורכב מ-2 נק' (אחת שמאלית ואחת ימנית) ולכל נק' יש כמובן קורדינטת X וקורדינטת Y, שניים מהמתודות שעלי לכתוב הם:boolean isAbove (Segment1 other) 1 - שיטה שמקבלת מקטע כפרמטר ומחזירה האם המקטע שעליו הופעלה השיטה נמצא מעל למקטע שהתקבל כפרמטר.boolean isUnder (Segment1 other) 2 - שיטה שמקבלת מקטע כפרמטר ומחזירה האם המקטע שעליו הופעלה השיטה נמצא מתחת למקטע שהתקבל כפרמטר. השיטה הזו משתמשת אך ורק בשיטה isAbove שהוגדרה לעיל.ה-Class שלי מורכב מ:public class Segment1{ private Point _poLeft; private Point _poRight;}לפני זה הייתי אמור לכתוב Class Point שגם שם הייתי צריך לממש מתודת isAbove ומתודת isUnder (המתודות האלו מקבלות נק' כפרמטר) וזה מה שכתבתי: public boolean isAbove(Point other) { if (this._y > other._y) { return true; } else { return false; } } public boolean isUnder(Point other) { return !(this.isAbove(other)); }עכשיו מה שקורה זה שב-Class Segment אני משתמש במתודות שהגדרתי ב-Class Point וזה מה שרשמתי: public boolean isAbove(Segment1 other) { if (this._poLeft.getY() > other._poLeft.getY()) { return true; } else { return false; } } public boolean isUnder (Segment1 other) { return !(isAbove(other)); }עכשיו הבעיה שלי היא שבמקרה ויש לי 2 מקטעים שזהים מבחינת הגובה (אותו Y) אני עדיין מקבל True ולא False: Segment1 s1 = new Segment1(5, 4, 12, 4); Segment1 s2 = new Segment1(1, 4, 6, 4); System.out.println(s1.isUnder(s2));
פורסם 2012 באפריל 1313 שנים ברור שזה מה שתקבל, תנסה לחשוב לוגית מה עשית. מה האופרטור ההפוך ל"גדול מ"?
פורסם 2012 באפריל 1313 שנים שים לב מה קורה אם המקטעים באותו גובה.המתודה isAbove תחזיר לך FALSE - שזה נכון. אבל, אתה הגדרת את המתודה isUnder להחזיר את ההפך מ isAbove. במקרה שלנו, המתודה תחזיר TRUE - לא נכון. מה הבעיה? כמו שכתבתי, המתודה isUnder לא בודקת האם הקטע האחר נמצא מתחת לקטע הנוכחי, אלא בודקת האם הוא אינו מעליו.מה פירוש אינו מעליו? בדיוק כמו שכבר ענית בעצמך בהודעה הקודמת - מתחת או באותו גובה.
פורסם 2012 באפריל 1313 שנים מחבר שיניתי את מתודת ה-is Above (ב-Class point): public boolean isAbove(Point other) { return (this._y > other._y); }אבל עדיין יש לי בעיה עם המתודת isUnder ואני לא ממש מצליח, אשמח לעזרה.
פורסם 2012 באפריל 1313 שנים הבעיה היא לא במתודה isAbove, אלא במתודה isUnder.אל תעשה שהיא תהיה isAbove!, אלא תכתוב אותה כמו שצריך. כלומר כמו isAbove רק עם סימן הפוך.במקרה כזה, שים לב שעדיין תוכל לקבל עבור קטעים באותו גובה גם FALSE מ isAbove וגם FALSE מ isUnder.
פורסם 2012 באפריל 1313 שנים מחבר בסופו של דבר עשיתי משהו כזה: public boolean isAbove(Point other) { return (this._y > other.getY()); } public boolean isUnder(Point other) { return (this._y != other.getY()) && !isAbove(other); }
פורסם 2012 באפריל 1413 שנים אם אתה כבר ככה פונה לשדות של המחלקה, למה לא לבצע את הפעולה הפשוטה של "קטן מ"?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.