פורסם 2012 באפריל 1413 שנים יש לי Class Section:public class Section{ private Point _poCenterPoint; private double _length;}ל-Class Point שגם בו אני משתמש יש מתודות של getX(), getY(), ו-setX, setYClass Section זה מעין קטע שלו יש נק' אמצע (_poCenterPoint) ואורך (_length), הוא מקביל לציר ה-X ומקבל בבנאי שלו או 2 נק' או נק' אמצע ואורך.אחת מהמתודות שאני אמור לרשום היא public boolean equals(Section other)ז"א אני מקבל מקטע אחר ומחזיר true אם הם זהים.זו המתודה שלי: public boolean equals(Section other) { if (this._poCenterPoint == other._poCenterPoint && this._length == other._length) { return true; } else { return false; } }וה-main: Point p1 = new Point(1.0, 4.0); Point p2 = new Point(1.0, 4.0); Section s2 = new Section(p1, 2); Section s3 = new Section(p2, 2); System.out.println(s2.equals(s3));הבעיה שלי היא שאני לא מבין למה אני מקבל false שאני משווה בין 2 המקטעים שהם זהים לחלוטין.
פורסם 2012 באפריל 1413 שנים בשתי מילים: כשמשווים אובייקטים, צריך להשתמש בפונקציה equals ולא באופרטור ==. כדאי שכל אובייקט שאתה כותב ידרוס את הפונקציה equals עם מימוש מתאים.ליתר פירוט, קרא על השוואה בג'אווה:http://www.underwar.co.il/1-Programming/d161/22עוד כמה הערות קטנות על הקוד שלך:א. ברוב המקרים אין צורך להשתמש במילה this, אפשר לגשת ישירות לשדות של המחלקה שלך.ב. למה השדה של נקודת האמצע נקראת poCenterPoint? ה-po מיותר לחלוטין, כי כבר יש לך Point בשם של המשתנה. יש שיאמרו שגם ה-Point מיותר, כי ברור למי שקורא את הקוד שמדובר בנקודה, ומספיק שהיית קורא לשדה הזה center.ג. התוצאה של ביטוי לוגי היא boolean. קוד מהצורה הבאה:if (some condition) { return true;} else { return false;}הוא מיותר, כי אפשר פשוט לעשות ככה:return (some condition);
פורסם 2012 באפריל 1413 שנים בדוטנט זה אותו דבר, חוץ מעבור מחרוזות (כלומר, ב-#C אפשר לבצע השוואה בין שתי מחרוזות באמצעות ==, בעוד שבג'אווה צריך equals).חוץ מזה, בדוטנט אפשר גם לדרוס את אופרטור == (בג'אווה אין דריסת אופרטורים), ככה שהן לא בדיוק אותו דבר.
פורסם 2012 באפריל 1513 שנים מחבר לגבי שמות המשתנים זה משהו שמוגדר לי בשיעורי הבית ואני לא יכול לשנות (מורידים נק' על כל שטות)תודה רבה על ההסבר !
פורסם 2012 באפריל 1513 שנים מחבר אני לא מבין למה אני מצליח להשוות רק פעם אחת בתוך ה-if:זה מתקבל:if(this._poCenterPoint.equals(other._poCenterPoint))זה לא:if(this._poCenterPoint.equals(other._poCenterPoint) && this._length.equals(other._length))
פורסם 2012 באפריל 1513 שנים בשתי מילים: כשמשווים אובייקטים, צריך להשתמש בפונקציה equals ולא באופרטור ==.
פורסם 2012 באפריל 1813 שנים אני מתאר לעצמי שזה מאוחר מידי אולם יש לי שתי הערות1) אתה צריך לממש ()equals גם למחלקה Point על מנת להשוות נכון בין שני אובייקטים מאותה מחלקה2) למרות שהמתודה שלך אכן תופעל במקרה שלך, היא אינה דורסת את המתודה equals של המחלקה Objectיש לכך השלכות אם תחליט להוסיף מחלקת אב למחלקה שלך, או אם תחליט להשתמש באיזה collection
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.