בעיה ב2 שיטות בעבודה להגשה צריך עזרה ממש דחוף... - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בעיה ב2 שיטות בעבודה להגשה צריך עזרה ממש דחוף...


DeGod

Recommended Posts

אהלן אני עשיתי עבודה די גדולה אני אפרסם קודם כל מה ביקשו ממני לעשות ואז את השיטות שיש לי בהם בעיות(מבחינת הטסטרים שמוצאים לי בהם תקלות) אשמח אם תוכלו לעזור לי למצוא כי אני כבר 3 ימים לא מבין איפה אני טועה...(הצלחתי לצמצתם מ30 באגים ל6...)

המשימה:

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

1. האות עצמה;

2. מספר הפעמים שהיא מופיעה ברצף;

3. מצביע לצומת הבא ברשימה.

כך למשל המחרוזת " aabbbacddd " תיוצג על- ידי הרשימה הבאה:

VIKA.jpg

המחלקה CharNode שלהלן מייצגת צומת ברשימה:

http://pastebin.com/724Yf0M8

(לינק למחלקה שנתנו לנו)

המחלקה StringList מייצגת את הרשימה כולה"

ואני מניח שלא תצרכו את הקוד שלה מאחר והיא פשוט מצביע לCharNode עכשיו הנה הבעיה 2 שיטות שהם ביקשו:

שיטה ראשונה:

"public int compareTo (StringList str)  - המשווה בין המחרוזת המיוצגת על- ידיהאוביקט עליו היא מופעלת, למחרוזת str שבפרמטר. השיטה מחזירה את הערך 0 אם המחרוזות

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

ואם המחרוזת שבאובייקט גדולה לקסיקוגרפית מהמחרוזת str יוחזר ערך חיובי."

הבעיה השניה הינה בבנאי שתוכלו לראות...(כל שאר הבדיקות (80) עוברות באופן תקין)

והנה מה שאני עשיתי:

http://pastebin.com/hAaASWRT

הטסטר שמראה לי שגיאות(חייב לציין שמישהו שאיתי בקורס הכין אותו לא המרצים עצמם):

http://pastebin.com/vCn6rydF

הבאגים שהטסטר מראה:

StringListStringList_null_Should_CreateEmptyString

compareTo_aabbc_aabbbc

compareTo_a_aa

compareTo_aabb_aab

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

לגבי compare אז קודם כל גם שם אין צןרך להעתיק את הרשימות

חוץ מזה לא נתת את הקוד של השיטה conditionsCompare

חוץ מזה אין בשיטה התיחסות לvalue כלומר לעובדה שתא אחד יכול ליצג מספר אותיות זהות

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

טוב, הקוד שלך מבולגן למדי ויש שם עוד כמה טעויות

למשל אתה לא יכול לשאול

 s==""

אתה צריך להשתמש בequals

חוץ מזה אתה עושה לוגיקה של בנית רשימה והוספת איבר לרשימה בכמה שיטות (הבנאי שמקבל CharNode הבנאי שמקבל StringList הבנאי שמקבל String) למה כל פעם לחזור על אותו לוגיקה?

אולי פשוט תעשה שיטה add שתקבל CharNode ותשתמש בה בכל מקום שצריך?

לגבי compareTo

מה שאתה עושה זה מדלג על כל הנודים שזהים (השיטה conditionsCompare בעצם בודקת שוויון בין שני CharNode למה לא לקרוא לה בשם מתאים?) ואז כשגילית זוג נודים שאינו שווה אז אתה משווה את הdata אבל מתעלם מזה שהvalue יכול להיות מה שאינו שווה (גם value זה שם מטעה. היו צריכים לקרוא לזה count)

בשלושת המקרים שנתת זה מה שקורה בעצם

למה מתעלם מהVALUE הקונדישן קומפר בודק גם את הVALUE של כל אחד מהם...

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

כן אבל אחרי שאתה יוצא מהלולאה של קונדישן קומפר אתה משווה רק את data

תודה מבין עכשיו... יש מצב שתנסה לעזור לי לרשום את זה משומה כשאני רושם את זה זה פשוט מראה כאילו יש יותר שגיאות? אולי משהו שאני לא שם לב?

רציתי להוסיף

if( firstCopy.getValue() > strCopy.getValue())

return 1

משהו בסגנון הזה ו-1- אם זה הפוך.... ?

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

אתה לא הבנת עד הסוף. אין צורך להשוות את הערכים של value. הרי זה מבטא מופעים של אותיות.

לדוגמא במקרה הזה

("aabbc", "aabbbc")

המחרוזות נבדלות באות החמישית. אתה צריך להשוות את המופע השלישי של האות B במחרוזת השניה עם האות C במחרוזת הראשונה. האות C נמצאת בכלל ב CharNode אחר

הבנת?

חשבתי על שיטה לסדר את זה שפתרה לי את רוב הבעיות אבל עדין נשארו לי כמה אשמח אם תתקן אותי

http://pastebin.com/Et26megL

עכשיו נשארה לי בעיה עם

aabbc_aabbbc אין לי מושג מה עכשיו אני מפספס אשמח לשמוע את דעתך...

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

שני דברים

1) קודם כל, כשאתה עושה שיטה כמו listSum שעובדת על המשתנים הפרטיים של המחלקה, עדיף שהיא תעבוד על המשתנים הפרטיים של this במקום לקבל אותו כפרמטר

ככה תוכל לעשות

int firstCheck =listSum();
int secondCheck=str.listSum();

זה הרבה יותר נכון מבחינת פרדיגמת תכנות מונחה עצמים

2) השיטה החדשה שלך היא לא לענין. אתה משוה אורכים של שתי הרשימות אבל זה לא בדיקה לקסיקוגראפית (אתה יודע מה זה?)

לקסיקוגראפית זה לפי הא,ב עד כמה שאני יודע המספרים מסודרים לפי הABC גם בערכם המספרי אני טועה?

ואני לא משווה ערכים.. אני משווה את הערך הכולל של האותיות....

עריכה:עכשיו הבנתי תעניין...

- - - תגובה אוחדה: - - -

חושב שסידרתי תבעיה

http://pastebin.com/6WsMHGU9

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

אוקי, קודם כל מצטער, לא ראיתי מקודם שאתה סוכם את data בתוך הלולאה ב listSum.

מה שאתה עושה שם בעצם זה מכפיל את data ב value . אין צורך בלולאה בשביל זה.

ולפי דעתי זו לא הגישה הנכונה.

לפי דעתי הפתרון הנכון הוא זה

1) הלולאה של conditionsCompare היא בסדר. היא נועדה להגיע למקום הראשון שבו יש הבדל בין הרשימות המקושרות.

2) אחרי הלולאה אנחנו יכולים להגיע לאחד מהמצבים הבאים

2.1) אחד מהמצביעים הוא null - אחת מהרשימות הגיעה לסופה. הרשימה השניה היא גדולה יותר

2.2) שני המצביעים הם null - הרשימות זהות

2.3) אף אחד מהמצביעים הוא null - ההבדל הוא בCharNode-ים האחרונים שהושוו. אם ההבדל הוא ב data שלהם אפשר להחזיר את תוצאת החיסור של ה data

2.4) אם ההבדל בין ה CharNode-ים הוא ב value ז"א שאחד מהם מיצג רצף אותיות קטן יותר מהשני ז"א שצריך להשוות את ה CharNode הבא

לדוגמא

compareTo("aabbcc", "aabbbc") 
listString1 = CharNode('a',2) -> CharNode('b',2) -> CharNode('c',2) -> null
listString2 = CharNode('a',2) -> CharNode('b',3) -> CharNode('c',1) -> null

הלולאה של conditionsCompare תיעצר באיבר השני. ההבדל בין האיברים הוא ב value. אנחנו צריכים להשוות את הb השלישי במחרוזת השניה מול הc הראשון במחרוזת הראשונה - ז"א לבחור את הCharNode בעל הvalue הקטן יותר, לקחת את ה CharNode שבא אחריו (צריך לבדוק שלא הגענו לסוף הרשימה) ולהשוות את ה data שלו וdata של האיבר עם הvalue הגדול יותר.

בזכותך הצלחתי בסופו של דבר הצלחתי לסדר את הכל תודה ענקית... הנה הקוד שיצא לי בסופו של דבר:

http://pastebin.com/LqwL9av2

עכשיו שאלה אחרונה הכל אצלי פועל תקין חוץ מהטסטר הזה:

public void StringListStringList_null_ShouldCreateEmptyString() {

// Arrange

// Act

StringList sl = new StringList((StringList) null);

// Assert

assertEquals("", sl.toString());

}

אני מניח שזה בעיה של הגישה שלו לעומת שלי? בהגדרה של הNULL שאני מחזיר לעומת שלו

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

קודם כל, מימשת toString ל StringList?

- - - תגובה אוחדה: - - -

מצאתי.

השיטה מתחילה בזה

public String toString()
{
if (this._head ==null)//if its null then we return null
return null;

אולי פשוט תחזיר מחרוזת ריקה במקום null

גם לא עובד :/

למרות שתכלס אני חושב שזה לא עובר כי לפי מה שהוא רשם לא נוצר כלום...

(זה לא טסטר שהמרצים הכינו זה בחור מהקורס שהוא די חכם הכין... אז יש מקום לטעויות אצלו בטסטר)

מה דעתך? או שזה שגיאה שלי?

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

זה לא ענין של טעות כמו שהוא החליט ש toString יחזיר מחרוזת ריקה אם StringList מאותחל ב null

ככל הנראה זה מתאים למימוש שלו.

מה אתה מחזיר במקרה כזה?

toString)) המשדורג שלי מחזיר "" במקרה של NULL

והבנאי של סטרינג במידה והוא NULL מכניס לHEAD גם את NULL

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

ארכיון

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

×
  • צור חדש...