פורסם 2012 במרץ 1313 שנים מחבר אני לא מבין איפה יש טעות בקוד הזה ואיך אני אמור לבדוק מקרה שבו רק אחד הבנים שווה ל-null אם לא עי כמה משפטי תנאי???
פורסם 2012 במרץ 1313 שנים אני אדחוף אותך בכיוון: אתה צריך להחזיר "אמת" אם הצומת הוא עלה, או שיש מסלול "טוב" שמתחיל בצד שמאל, או שיש מסלול "טוב" שמתחיל בצד ימין. תחשוב מה התנאי שאומר שיש מסלול "טוב" שמתחיל בצד שמאל.
פורסם 2012 במרץ 1313 שנים מחבר if(t.GetLeft.getinfo==t.getinfo)return onepath(t.getleft);אתה מסכים איתי שתנאי העצירה הוא? if(t.GetLeft==null && t.GETright==null)return true;
פורסם 2012 במרץ 1313 שנים כן, תנאי העצירה שלך סבבה, תשאיר אותו.עכשיו תחשוב איך בודקים שיש מסלול טוב בצד שמאל (התנאי שכתבת בהודעה הקודמת רק בודקת אם האבא שווה לבן השמאלי, אבל לא בודק את שאר המסלול).
פורסם 2012 במרץ 1313 שנים אני רואה שתיקנת את הקוד בהודעה הקודמת, זו כבר התקדמות.אבל מה קורה אם אין בן שמאלי?אל תהסס להשתמש באופרטור &&.
פורסם 2012 במרץ 1313 שנים מחבר אולי ככה??if(t.GEtleft!=null && t.GetLeft.getinfo==t.getinfo)return onepath(t.getleft);
פורסם 2012 במרץ 1313 שנים כבר יותר טוב.אבל עדיין יש לך בעיה - אם הקריאה ל-onepath מחזירה false אתה יוצא מהפונקציה, ולא בודק בכלל את תת העץ הימני.
פורסם 2012 במרץ 1513 שנים מחבר הוספתי עוד חלק לתנאי. זה טוב? האם אני צריך להוסיף בהתחלה של הפעולה שאם t=null אז הפעולה תחזיר false ?(למקרה שצד אחד NULL והשני לא) if(t.GEtleft!=null && t.GetLeft.getinfo==t.getinfo || t.getright!=null&&t.getright.getinfo==t.getinfo)return onepath(t.getleft)||onepath(t.getright));
פורסם 2012 במרץ 1513 שנים יותר טוב, אבל תחשוב איך אתה יכול לסדר את התנאים שלך מחדש כדי להימנע מהבדיקה הזו. תזכור ש-onepath זו פונקציה שמחזירה boolean, ולכן אתה יכול להשתמש בתוצאה שלה ב-if בדיוק כמו כל שאר התנאים. תפריד לחלוטין בין צד ימין וצד שמאל - שים את כל הבדיקות על צד ימין בתנאי אחד, ובתנאי אחר את כל הבדיקות על צד שמאל.
פורסם 2012 במרץ 1513 שנים מחבר אני לא יודע אי לעשות את זה בכמה משפטי תנאי. אם המשפט תנאי הראשון הוא על הצד השמאלי-הפעולה תחזיר אמת או שקר, ובכלל לא תתיחס למשפט התנאי הבא של הצד הימני.בסודף לא הבנתי למה מה שעשיתי קודם לא טוב..
פורסם 2012 במרץ 1513 שנים למה הפונקציה חייבת להסתיים אחרי שקוראים ל-onepath? הרי אם onepath על צד אחד החזירה false, אתה לא רוצה לצאת מהפונקציה, אתה רוצה להמשיך לבדוק גם את הצד האחר.
פורסם 2012 במרץ 1513 שנים if (onepath(...)) { // do one thing} else { // do something else}כמו אפשר לשלב את זה עם עוד ביטויים לוגיים באמצעות && ו-|| וכאלה.
פורסם 2012 במרץ 1513 שנים מחבר if(t.Getleft!==null && t.GetLeft.getinfo==t.getinfo) && onepath(t.getleft)==true)return onepath(t.getleft);else if(t.Getright!==null && t.Getright.getinfo==t.getinfo)return onepath(t.getright);
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.