请使用代码格式!package algorithm;import java.util.ArrayList;
import java.util.List;public class Tree {
private List<Node> list = new ArrayList<Node>();
public Tree(String s){
Node zero = new Node();
zero.data = s;
list.add(zero);
}
/*
*内部类节点对象,包含父节点和自身数据
*/
class Node{
String data;
String dad;
@Override
public String toString() {
// TODO Auto-generated method stub
return "dad: "+dad+" ; "+"data: "+data;
}
}
public static void main(String[] args) {
Tree tree = new Tree("world");
tree.add("world","asia");
tree.add("world","america");
tree.add("world","africa");
tree.add("asia","China");
tree.add("asia","Japan");
tree.add("asia","Korean");
System.out.println(tree.children("world"));
System.out.println(tree.parent("asia"));
// System.out.println(tree.children("world"));
}public List<String> children(String s) {
List<String> l = new ArrayList<String>();
for(int i=0;i<list.size(); i++)
if(list.get(i).dad==s) l.add(list.get(i).data);  //这里如果使用list.get(i).dad.equals(s)方法比较则会报空指针异常
return l;
}
public String parent(String s) {
for(int i=0;i<list.size();i++){
if(list.get(i).data.equals(s))   //这里的.equals却能正常运行
return list.get(i).dad;
}
return null;
}
public void add(String dad, String data) {
for(int i=0; i<list.size(); i++){
if(list.get(i).data.equals(dad)){
Node node = new Node();
node.dad = dad;
node.data = data;
list.add(node);
}
}
}
}

解决方案 »

  1.   

    如果两个都是null,那你==就没问题了啊
    如果前面一个是null,那你equals就会nullpointer
      

  2.   

    你那个list.get(i).dad这行代码拿到是一个null,你在后面.equals方法,null的对象去调用方法,肯定报空指针啊!但是,null == String的一个对象,就返回false啊,不会空指针。自己debug下就知道了
      

  3.   

    import java.util.ArrayList;
    import java.util.List;public class Tree {
    private List<Node> list = new ArrayList<Node>(); public Tree(String s) {
    Node zero = new Node();
    zero.data = s;
    list.add(zero);
    } /*
     * 内部类节点对象,包含父节点和自身数据
     */
    class Node {
    String data;
    String dad; @Override
    public String toString() {
    // TODO Auto-generated method stub
    return "dad: " + dad + " ; " + "data: " + data;
    }
    } public static void main(String[] args) {
    Tree tree = new Tree("world");
    tree.add("world", "asia");
    tree.add("world", "america");
    tree.add("world", "africa");
    tree.add("asia", "China");
    tree.add("asia", "Japan");
    tree.add("asia", "Korean");
    System.out.println(tree.children("world"));
    System.out.println(tree.parent("asia"));
    // System.out.println(tree.children("world"));
    } public List<String> children(String s) {
    List<String> l = new ArrayList<String>();
    for (int i = 0; i < list.size(); i++) {
    if (s.equals(list.get(i).dad)) //java编码规范建议这橛写,"".equals(变量)
    //if(list.get(i).dad==s)// 这里如果使用list.get(i).dad.equals(s)方法比较则会报空指针异常
    {
    l.add(list.get(i).data);
    }
    }
    return l;
    } public String parent(String s) {
    for (int i = 0; i < list.size(); i++) {
    if (list.get(i).data.equals(s)) // 这里的.equals却能正常运行
    return list.get(i).dad;
    }
    return null;
    } public void add(String dad, String data) {
    for (int i = 0; i < list.size(); i++) {
    if (list.get(i).data.equals(dad)) {
    Node node = new Node();
    node.dad = dad;
    node.data = data;
    list.add(node);
    }
    }
    }
    }
      

  4.   

    大概是你的for()循环遍历越界了吧,取到了Null