程序如下:
public class NewMap {
    ViewNode node[]=new ViewNode[4];//声明ViewNode对象的数组
    public NewMap()
    {
        Edge edge[][]=new Edge[4][];//声明Edge对象数组
        edge[0]=new Edge[]{new Edge(200,node[2]),new Edge(300,node[3])};//实例化对象edge
     edge[1]=new Edge[]{new Edge(200,node[1])};                       将node对象作为
     edge[2]=new Edge[]{new Edge(200,node[0]),new Edge(300,node[1])}; 参数传入
     edge[3]=new Edge[]{new Edge(300,node[2]),new Edge(300,node[0])}; 
     for(int i=0;i<4;i++)
        {
      node[i]=new ViewNode(edge[i]);//实例化对象node,将edge对象作为参数传入
        }  
    }
 }
//////////Edge类
public class Edge {
public int wayLength;
ViewNode viewnodenext=null;
    
public Edge(int WayLength,ViewNode nextViewNode)
{
 
wayLength=WayLength;
viewNodeNext=nextViewNode;


////////ViewNode类
public class ViewNode {
    
    Edge edge[]=new Edge[4];
    public ViewNode(Edge _edge[]) {
        
        for(int i=0;i<_edge.length;i++)
        {
         edge[i]=_edge[i];
        }
    }

问题是在NewMap类里面,在实例化Edge类的时候,需要将Node类对象作为参数传入,但Node类在后面才被实例化。也就是说我在访问Edge类的viewNodeNext成员的时候,viewNodeNext还没有指向一个ViewNode的实例。会出现java.lang.NullPointerException异常。
如果先实例化ViewNode类,但ViewNode类里又需要传入Edge类的实例,Edge类又没被实例化。又同样会出现java.lang.NullPointerException异常。
总的来说就是,相互调用对象,但实例化的先后顺序不一样,不管先实例化哪个对象都会出现java.lang.NullPointerException异常。希望有人帮忙提供方案解决问题。

解决方案 »

  1.   

    public class Edge {
    public int wayLength;
    ViewNode viewnodenext=null;
        
    public Edge(int WayLength,ViewNode nextViewNode)
    {
     
    wayLength=WayLength;
    viewNodeNext=nextViewNode;


    ////////ViewNode类
    public class ViewNode {
        
        Edge edge[]=new Edge[4];    public ViewNode(){}    public set(Edge _edge[]) {
            for(int i=0;i<_edge.length;i++)
            {
             edge[i]=_edge[i];
            }
        }