ABA


"צריך עזרה קטנה בעץ בינארי בג'אווה"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10464 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10464
-KINGMAN-  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 13.4.03
7284 הודעות, 2 פידבק
   13:51   28.08.11   
אל הפורום  
  צריך עזרה קטנה בעץ בינארי בג'אווה  
 
   ערכתי לאחרונה בתאריך 28.08.11 בשעה 13:55 בברכה, -KINGMAN-
 
טוב אז ככה יש לי עץ שרשמתי אותו כך.עכשיו אני רוצה לעשות מתודה שתקבל ערכים מסוג STRING תשווה בינהם הערך שגדול יותר יילך לצד ימין והערך הקטן לצד שמאל, ומתודה נוספת שתדפיס עכשיו מה שאני רושם זה משום מה לא נותן לי אשמח עם מישהו יכל לעזור לי תודה



class BinaryNode {


private Comparable value;


private BinaryNode left;
private BinaryNode right;




public BinaryNode(Comparable value) {
this.value = value;
this.left = null;
this.right = null;
}



public Comparable getValue() {
return value;
}


public void setValue(Comparable value) {
this.value = value;
}





public BinaryNode getLeft() {
return left;
}



public void setLeft(BinaryNode left) {
this.left = left;
}



public BinaryNode getRight() {
return right;
}


public void setRight(BinaryNode right) {
this.right = right;
}
}


public class BinaryTree {

private BinaryNode root;


public BinaryTree() {
root = null;
}


public void add(Comparable value) {
root = add(value, root);
}


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  לא הבנתי מה אתה אומר... אתה רוצה שהעלים יהיו מחרוזות? ldan192  29.08.11 22:46 1
     שיתקבלו רק מחרוזות ותתבצע השוואה -KINGMAN-  29.08.11 23:58 2
         אני לא מצליח לעשות שאם יש מילה פעמיים זה ירשום -KINGMAN-  30.08.11 01:50 3
  מישהו? -KINGMAN-  31.08.11 16:13 4
     מכתב Deuce  31.08.11 16:25 6
  לא הצלחתי להבין מה השאלה ומה ניסית לעשות ולא הצלחת עידן_הכלי 31.08.11 16:20 5

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   22:46   29.08.11   
אל הפורום  
  1. לא הבנתי מה אתה אומר... אתה רוצה שהעלים יהיו מחרוזות?  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
-KINGMAN-  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 13.4.03
7284 הודעות, 2 פידבק
   23:58   29.08.11   
אל הפורום  
  2. שיתקבלו רק מחרוזות ותתבצע השוואה  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 30.08.11 בשעה 00:22 בברכה, -KINGMAN-
 
ואז זה יופיע לי לפי סדר ה-A,B,C (שאת זה הצלחתי לעשות )ואז לעשות פונקציה שתבדוק אם יש שם שמופיע פעמיים אז היא תרשום 2 ליד השם. בנתיים הוספתי תפונקצה הנ''ל שתבצע השוואה

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import javax.swing.text.AbstractDocument.LeafElement;


class BinaryNode {


private Comparable value;


private BinaryNode left;
private BinaryNode right;




public BinaryNode(Comparable value) {
this.value = value;
this.left = null;
this.right = null;
}



public Comparable getValue() {
return value;
}


public void setValue(Comparable value) {
this.value = value;
}





public BinaryNode getLeft() {
return left;
}



public void setLeft(BinaryNode left) {
this.left = left;
}



public BinaryNode getRight() {
return right;
}



/**
*
* Set the right subtree
*
* @param right the right subtree
*/
public void setRight(BinaryNode right) {
this.right = right;
}
}


public class BinaryTree {

private BinaryNode root;


public BinaryTree() {
root = null;
}


public void add(Comparable value) {
root = add(value, root);
}

private BinaryNode add(Comparable v, BinaryNode n) {
//check if real value
if(n == null ) {
//create a new node
n = new BinaryNode(v);
}
else if(v.compareTo(n.getValue()) < v.compareTo(v)){
n.setLeft(add(v, n.getLeft()));
}
else if(v.compareTo(n.getValue()) > v.compareTo(v)) {
n.setRight(add(v, n.getRight()));
}
else {
throw new RuntimeException("Duplicate value:"+v);
}
return n;
}

private void printInOrder() {
if (root != null) {
printInOrder(root);
}
}
public boolean isEmpty( ) {
return root == null;
}


private void printInOrder(BinaryNode n) {
if (n != null) {
//left
printInOrder(n.getLeft());

//current
System.out.println(n.getValue());

//right
printInOrder(n.getRight());

}
}


public static void main( String args ) {
BinaryTree t = new BinaryTree( );

t.add("aaa");
t.add("uuu");
t.add("yyy");
t.add("bbb");




t.printInOrder();
}
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
-KINGMAN-  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 13.4.03
7284 הודעות, 2 פידבק
   01:50   30.08.11   
אל הפורום  
  3. אני לא מצליח לעשות שאם יש מילה פעמיים זה ירשום  
בתגובה להודעה מספר 2
 
   תמילה :2 ,אשמח לעזרה את זה הסרתי אך אני עדיין לא מצליח כנראה חסר לי מערך שיעשה את זה אבל אני לא מצליח לרשום אני מקבל שגיאה בכל ניסיון אשמח לעזרה

else { throw new RuntimeException("Duplicate value:"+v); }


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
-KINGMAN-  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 13.4.03
7284 הודעות, 2 פידבק
   16:13   31.08.11   
אל הפורום  
  4. מישהו?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   16:25   31.08.11   
אל הפורום  
  6. מכתב  
בתגובה להודעה מספר 4
 

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));

ולכן קל להקריס אותו.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
עידן_הכלי

   16:20   31.08.11   
אל הפורום  
  5. לא הצלחתי להבין מה השאלה ומה ניסית לעשות ולא הצלחת  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net