Clone לרשימה מקושרת - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


Statement

Recommended Posts

מה שלומכם?

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

"בצעו את השינויים הדרושים כדי לאפשר שכפול עמוק ככל האפשר של רשימה מקושרת. השינויים ייכללו את המחלקות 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"

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

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

אילי

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

אילי

קישור לתוכן
שתף באתרים אחרים

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...