else if(v.compareTo(n.getValue()) < v.compareTo(v)){
|
למה השוות את v לעצמו?
הפונקציה compareTo מחזירה -1,0,1 כאשר v קטן מ-, שווה ל-, גדול מ- בהתאמה.היית אמור לכתוב משהו בסגנון:
if (v.compareTo(n.getValue()) == 0) // Already Exists if (v.CompareTo(n.getValue()) == -1) // Add to Left if (v.CompareTo(n.getValue()) == 1) // Add to Right
|
דבר שני, אם כבר ניסית להיות גנרי, אז החוזה שלך הוא לא טוב. אתה מקבל משתנה מטיפוס Comparable, כאשר יכול להיות שהערכים בעץ הם מטיפוס שונה לחלוטין מהערך ש-compareTo צריך לקבל.
Comparable זה מנשק ואפשר לממש אותו כרצוננו. ההצעה שלי היא להחליף את Comparable (בכל המקומות) במחלקה פנימית חדשה שתקרא לה מבחינתי V שתממש את Comparable ואז תוכל לוודא שאכן כל פעם אתה מקבל משתנים מאותו סוג.
לצורך העניין, כרגע העץ שלך יכול לקבל:
add("12"); add(12); add(new BigDecimal(12.5));
ולכן קל להקריס אותו.
