עבור לתוכן

Clone לרשימה מקושרת

Featured Replies

פורסם

מה שלומכם?

קיבלתי את השאלה הזאת:

"בצעו את השינויים הדרושים כדי לאפשר שכפול עמוק ככל האפשר של רשימה מקושרת. השינויים ייכללו את המחלקות List, ListNode."

List- מחלקת הרשימה המקושרת, יש לה 2 תכונות- FirstNode וLastNode שהם מצביעים מסוג ListNode על האיבר הראשון והאחרון ברשימה המקושרת.

ListNode- איבר הרשימה המקושרת, יש לו 2 תכונות- NextNode וData, יש את NextNode שזה מצביע מסוג ListNode על האיבר הבא ברשימה, וData שזה שומר את המידע של האיבר ברשימה(מסוג object).

אם מישהו יוכל לעזור לי, אני אשמח.

תודה לעוזרים

פורסם

איפה התוכנית , שעליה צריך לעשות את השינויים ?

מה זאת אומרת "שכפול עמוק ככל הניתן"

בשביל להעתיק , תעשה איזו לולאה , שבכל איטרציה יוצרת קודקוד חדש ומקשרת אותו אל הבא ..

אם אני טועה , יתקנו אותי ,..

פורסם
  • מחבר
איפה התוכנית , שעליה צריך לעשות את השינויים ?

מה זאת אומרת "שכפול עמוק ככל הניתן"

בשביל להעתיק , תעשה איזו לולאה , שבכל איטרציה יוצרת קודקוד חדש ומקשרת אותו אל הבא ..

אם אני טועה , יתקנו אותי ,..

התוכנית שכתבתי-

http://pastebin.com/MUXCyHEC

השאלות כדי שיהיה מובן

עבור תוכנית הרשימה המקושרת (קישור לקובץ מופיע באתר הקורס בתפריט עבודות) הוסיפו את הפונקציונליות הבאה:

1.1 הגדירו מחדש את השיטה toString עבור המחלקה List . שיטה זו תחזיר מחרוזת שמייצגת את הרשימה בפורמט הבא:

( first element, second element …..)

עבור כל אלמנט מופעלת השיטה toString שלו (בין אם היא מוגדרת מחדש ובין אם לאו).

1.2 הגדירו שיטה חדשה עבור המחלקה List בשם removeAt שמקבלת כפרמטר אינדקס k ומוחקת מהרשימה את האלמנט במקום ה- k. השיטה מחזירה את האובייקט (data) שמחקה מהרשימה. שיטה זו מטילה חרגיה בשם ListIndexOutOfBound במקרה ו- k אינו ערך חוקי (שלילי או גדול מאורך הרשימה).

1.3 נתונה השיטה show במחלקה List:

public void show(){

if (firstNode==null)

return;

else

firstNode.show();

}

כתבו את השיטה show (רקורסיבית) עבור המחלקה ListNode.

1.4 כתבו שיטה showRev (בסגנון show) במחלקה List שנעזרת בשיטה רקורסיבית showRev של ListNode להדפסת הרשימה מהסוף להתחלה.

1.5 כתבו שיטה addAt שמקבלת כפרמטרים אובייקטים obj ומספר k. השיטה תוסיף את הפרמטר obj לרשימה המקושרת במקום ה- k. שיטה זו תיטול חריגה ListIndexOutOfBound עבור k שליל או גדול מאורך הרשימה.

1.6 כתבו שיטה addAtRec שמבצעת את פעולתה של addAt רק בצורה רקורסיבית. צורת הכתיבה היא בסגנון של השיטה show בסעיף 1.3 . כלומר, addAtRec של List לא תהיה רקורסיבית והיא תקרא ל- addAtRec של ListNode.

1.7 בצעו את השינויים הדרושים כדי לאפשר שכפול עמוק ככל האפשר של רשימה מקושרת. השינויים ייכללו את המחלקות List, ListNode.

1.8 כתבו שיטה toArray עבור המחלקה List. שיטה זו ממירה את הרשימה למערך של איברי הרשימה בפועל.

כן, אתה צודק, גם אני חשבתי לעשות ככה. לעשות לולאת while שתרוץ איבר איבר ולכל אחד תקרא לClone שלו. הClone שלו פשוט יבדוק אם Data מממש את Cloneable ואם כן יחזיר שכפול של Data שיכנס לאיבר חדש שיצביעו עליו האיברים הקודמים שיצרתי.

את כל זה ניסיתי, אבל אני חושב שרשמתי את זה לא טוב וקיבלתי מזה שגיאה.

כשניסיתי לעשות Clone לData שהוא מסוג Object קיבלתי את השגיאה הזאת- "

The method clone() from the type Object is not visible"

אני לא יודע איך לכתוב את זה, אם תוכל לעזור לי אני ישמח כי אני חייב להגיש את העבודה הזאת..

תודה רבה על העזרה

אילי

פורסם

את הטיפוס של Data אתה לא יודע לפני קומפילציה?

פורסם
  • מחבר
את הטיפוס של Data אתה לא יודע לפני קומפילציה?

נכון, אני לא יודע אותו

מה אתה חושב לעשות?

איך אני פותר את זה ??

תודה רבה

אילי

פורסם

זה כי המתודה clone היא protected.

אם האובייקט הוא מסוג object, אתה לא יכול להניח עליו כלום.

פורסם
  • מחבר
זה כי המתודה clone היא protected.

אם האובייקט הוא מסוג object, אתה לא יכול להניח עליו כלום.

אז מה אני צריך לעשות בשביל שמה שרשמתי למעלה שאני רוצה לעשות יעבוד?

זה יעבוד לדעתך? זה הפתרון?

אם תוכל לעזור לי לפתור, לא חייב היום אני לא רוצה להחזיק אותך ער.

תודה רבה על העזרה

אילי

פורסם

גיל ,

לא עדיף לו לכתוב שיטה שתעשה מה ש Clone עושה , עם ההתאמות הנדרשות למצבו ?

פורסם
  • מחבר
גיל ,

לא עדיף לו לכתוב שיטה שתעשה מה ש Clone עושה , עם ההתאמות הנדרשות למצבו ?

אם תוכלו כמובן, זה מאוד מאוד יעזור לי לסיים את העבודה שיש לי

פורסם

אני לא הולך לכתוב לך את זה .. ( אם זה נכון )

אם זה נכון , תאמר תודה על הרעיון . את המימוש ראוי שתעשה לבד .

פורסם

אילו התאמות תעשה? יש לך אובייקט מסוג Object. מה אתה עושה איתו? אתה לא יודע עליו כלום. אולי הוא מממש את cloneable ואולי לא.

אם clone קיים, הכל בסדר. אם לא, יזרק לך exception מסוג CloneNotSupportedException.

אתה יכול לתפוס אותו ואז לעשות shallow copy אבל אני לא חושב שרוצים שתגיע לדברים כאלה.

פורסם
  • מחבר
אילו התאמות תעשה? יש לך אובייקט מסוג Object. מה אתה עושה איתו? אתה לא יודע עליו כלום. אולי הוא מממש את cloneable ואולי לא.

אם clone קיים, הכל בסדר. אם לא, יזרק לך exception מסוג CloneNotSupportedException.

אתה יכול לתפוס אותו ואז לעשות shallow copy אבל אני לא חושב שרוצים שתגיע לדברים כאלה.

אז, אני צריך פשוט לבדוק אם הוא ממש את Cloneable ואם כן אני אמור לעשות לו איזה Casting או משהו? אני לא מבקש שתפתרו לי אני פשוט צריך שתתנו לי כיוון.

פורסם

אין קשר ל-casting.

אני מניח שכוונת המשורר הייתה לעבור חוליה חוליה ברשימה ולהעתיק אותו ולא להעתיק את ה-instance של הרשימה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים