2012-03-19 4 views
0

문자열의 ArrayList에서 BST로 값을 추가하고 "tree.add (s);"에 null 포인터 오류가 발생합니다. 내 코드를 추적 한 후에 왜 이런 일이 일어나는지 알 수 없습니다. 누군가가 도와주세요 수 :BST에 문자열을 추가하는 중 오류가 발생했습니다.

public class BinaryTree { 

public Node root; 
public BinaryTree tree; 

private static class Node { 
    Node left; 
    Node right; 
    String data; 

    Node(String s) { 
     left = null; 
     right = null; 
     data = s; 
    } 
} 

public BinaryTree plantTree(ArrayList<String> dict) { 

    Collections.shuffle(dict); 

    for (String s : dict) { 
     s.toUpperCase(); 
     System.out.print(s); 
     tree.add(s); 
    } 

    System.out.print(tree); 
    System.out.println(); 
    return tree; 

} 

/** 
* Creates an empty binary tree 
*/ 
public BinaryTree() { 
    root = null; 
} 

public boolean search(String data) { 
    return (search(root, data)); 
} 

private boolean search(Node node, String data) { 
    if (node == null) { 
     return (false); 
    } 

    if (data == node.data) { 
     return (true); 
    } else if (data.compareTo(node.data) > 0) { 
     return (search(node.left, data)); 
    } else { 
     return (search(node.right, data)); 
    } 
} 

public void add(String data) { 
    root = add(root, data); 
} 

private Node add(Node node, String data) { 
    if (node == null) { 
     node = new Node(data); 
    } else { 
     if (data.compareTo(node.data) > 0) { 
      node.left = add(node.left, data); 
     } else { 
      node.right = add(node.right, data); 
     } 
    } 

    return (node); 
} 

}

답변

1

당신은 그것을 사용하기 전에 뭔가에 tree 변수를 설정해야합니다. 예 :

public BinaryTree plantTree(ArrayList<String> dict) { 

    tree = new BinaryTree(); // important! 

    Collections.shuffle(dict); 

    for (String s : dict) { 
     s.toUpperCase(); 
     System.out.print(s); 
     tree.add(s); 
    } 

    System.out.print(tree); 
    System.out.println(); 
    return tree; 

} 

아마 tree은 인스턴스 변수가 아닌 메소드의 로컬 변수 여야합니까?

+0

내 문제가 해결되었습니다. 고마워요! –

+0

이제 "tree"의 각 값을 출력하는 toString() 메서드를 구현하는 방법에 대해 한 가지 더 궁금한 점이 있습니다. System.out.print (tree)를 사용할 때 이상한 값을 출력합니다. 이전에 본 적이 있었고 toString() 메서드를 재정 의하여 올바르게 인쇄했습니다. –

+0

'toString'이 기본값을 재정의하도록 올바르게 선언되지 않은 것 같습니다. 그래도 새로운 질문을하면 더 많은 잠재 고객을 확보하게됩니다. – Joni

관련 문제