在图中创建节点会导致nullpointerexception

时间:2013-11-19 23:29:27

标签: java graph

# 我是java的初学者,我正在尝试实现Graph数据结构。我可能已经完成了一个奇怪的实现,但我认为它应该可行,我不确定为什么我的Graph类中的createNode方法中存在错误。我认为someObject有一个空引用,但我不知道如何处理我的错误。我认为我的其余代码工作,但我不能确定,因为我无法测试它超过这一点。我的代码编译,但当我尝试从我的Graph类中创建一个Node时,我得到一个NullPointerError。我尝试了很多东西,但没有一个能奏效。之前,我试图在创建对象时动态命名对象,但显然Java不支持该功能,因此我使用实例化对象并将它们与字符串Key值一起存储在HashMap中。

我的主要课程

public class GraphTraversal{

    public static void main(String [] args)
        {
            Graph marvelUniverse = new Graph();
            marvelUniverse.createNode("Princess Leia");
            marvelUniverse.createNode("Luke Skywalker");
            marvelUniverse.nodeJoin("Princess Leia", "Luke Skywalker", "A beautiful friendship");
            System.out.println(marvelUniverse.isAdjacent("Princess Leia", "Luke Skywalker"));
        }
}

我的节点类

import java.util.HashMap;
public class Node
{
    protected String name;
    private HashMap<String,String> references;

    public Node(String character){
        this.name = character;
        this.references = new HashMap<String,String>();
        //HashMap<String, String> references = new HashMap<String, String>();
    }

    public void addRef(Node node, String edge){
        if (refExists(node)){
            if ((references.get(node.name)).compareTo(edge) >= 0){
            references.put(node.name, edge);
            }
            else 
                return;
        }
        else{
            references.put(node.name, edge);
            return;
        }
    }

    public boolean refExists(Node nodeName){
        if (references.get(nodeName.name) != null){
            return true;
        }
        return false;
    }
}

我的图表类

import java.util.HashMap;
import java.util.ArrayList;

public class Graph
    {

    private HashMap<String, Node> nodeList;
    private ArrayList<String> objNames;
    public int count=0;

    public Graph(){
        HashMap<String, Node> nodeList = new HashMap<String, Node>();
        // List<String[]> objNames = new ArrayList<String[]>();
        // for (int i=0;i<10000;i++){
        //  objNames.add(("objectnames"+i));
        }

    public void createNode(String nodeName){
        //if (this.nodeExists(nodeName)==false){
            Node someObject;
            someObject = new Node(nodeName);
            nodeList.put(nodeName, someObject);
        //  }
    }

    public boolean isAdjacent(String firstNode, String secondNode){
        if ((nodeList.get(firstNode)).refExists(nodeList.get(secondNode))){
            return true;
        }
        return false;
    }   

    public void nodeJoin(String firstNode, String secondNode, String edge){
        if (isAdjacent(firstNode, secondNode) != true){
            (nodeList.get(firstNode)).addRef((nodeList.get(secondNode)),edge);
            (nodeList.get(secondNode)).addRef((nodeList.get(firstNode)),edge);
        }
        return;
    }

/*  public void listRefs(String someNode){
        (nodeList.get(someNode)).retRefs();
    } */

    public boolean nodeExists(String nodeName){
        // if(nodeList.get(nodeName)!=null){
        //  return true;
        // }
        return false;
    }

    //public void stringToGraph()
}

1 个答案:

答案 0 :(得分:0)

当你仔细观察它时,你只声明NodeList没有在任何地方初始化它:

private HashMap<String, Node> nodeList;

你需要像

一样
private HashMap<String, Node> nodeList = new HashMap();

或者,您可以在构造函数中更改局部变量并更新Graph对象的nodeList变量:

public Graph(){
    this.nodeList = new HashMap<String, Node>();
}