我在MGraph类中声明下面的get方法  : 
      public int getWeight(int v1,int v2)throws Exception 

if(v1 <0 ¦ ¦v1>=vexnum ¦ ¦v2 <0 ¦ ¦v2>=vexnum)throw new Exception("顶点越界!!"); 
return edges[v1][v2]; 

在另一个类中调用: 
   public static void dijkstra(MGraph g,int v0,int path[],int dist[],int s[])throws Exception 
{  
int mindis,i,j,u,n=g.getVexnum(); 
for(i=0;i <n;i++) 
{ dist[i]=g.getWeight(v0,i); 
s[i]=0; 
if(i!=v0&&g.getWeight(v0,i) <MaxWeight) 
    path[i]=v0; 
else 
    path[i]=-1; 

在主函数调用此方法dijkstra(g,m,Path,distance,s); 
运行提示 Exceptin in thread “main”java.lang.NullPointerException   
        at  MGraph.getWeight 
        at   dijkstra 
        at  “main”这是为啥?怎么解决?急!!!!

解决方案 »

  1.   

    MGraph public static  int getWeight(
    MGraph.getWeight(v0,i); 
      

  2.   

    你在main方法里打印一下g的值看看是不是为null
    System.out.println(g)
      

  3.   

    答:虽然看起来应是g.getWeight(v0,i);  中出现空引用异常,但我还是想问一下也许是弱智的问题:
    在dist[i]=g.getWeight(v0,i);  中能否确保:参数dist[]对应的实参数据,已确实初始化了?
      

  4.   

    之前有int dist[]=null;不知这算不算初始化?
      

  5.   

    答:这当然不算啦.应:int dist[]=new int[...];
      

  6.   

    for(i=0;i<25;i++)
    {distance[i]=0; }
    这样总可以了。但getWeight()仍显示空:
    public static void dijkstra(MGraph g,int v0,int path[],int dist[],int s[])throws Exception  
    {   
    int mindis,i,j,u,n=g.getVexnum();  
    for(i=0;i  <n;i++)  
    { dist[i]=g.getWeight(v0,i);  
    s[i]=0;  
    if(i!=v0&&g.getWeight(v0,i)  <MaxWeight)  
        path[i]=v0;  
    else  
        path[i]=-1;  
    }  
    for(i=0;i<n;i++)
     {  for(j=0;j<n;j++)
          { System.out.print(g.getWeight(i,j)); System.out.print("\t");
          }
      System.out.println();
     }  
           
      

  7.   

    答:我的意思是说:在main()中调用 dijkstra(...)方法时,对应形式参数int dis[]的那个实在参数(如:int[]  distance ),其实已分配空间初始化了?
      

  8.   

    for(i=0;i <25;i++) 
    {distance[i]=0; } 
    就是在main方法中初始化的。
      

  9.   

    这样只能逼着我去想,MGraph中edges[][]; 是如何初始化的了?因为我觉得,g.getWeight(v0,i);  中出现空引用异常好像只剩下这个可能了(尽管这个可能性怎么看起来都像是"不可能"的)