# 我是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()
}
答案 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>();
}