帮我看看什么错!编译通过,运行显示main():java.lang.NullPointException

liang8821 2008-03-26 09:32:55
import java.io.*;
import java.util.Vector;
class MGraph
{
private Vector ves;
private int[][] edges;
private int vexnum,arcnum,i,j;
public MGraph(String[] Initves,int[][]Edges,int m,int n) //m,n分别代表顶点数和弧数
{
ves=new Vector<String>(java.util.Arrays.asList(Initves));
for(i=0;i<m;i++)
{ for(j=0;j<m;j++)
edges[i][j]=Edges[i][j];
}
vexnum=m;
arcnum=n;
}
public Vector getVes(){return ves;}
public int getVexnum(){return vexnum;}
public int getArcnum(){return arcnum;}
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
public void setEdges(int[][] Edges)
{for(i=0;i<vexnum;i++)
for(j=0;j<vexnum;j++)
{edges[i][j]=Edges[i][j];}
}
public void setVexnum(int aVexnum)
{vexnum=aVexnum;
}
public void setArcnum(int aArcnum)
{arcnum=aArcnum;
}

}
class Floyd
{ public void folyd(MGraph g)
{ int A[][],path[][];
int i,j,k,n=g.getVexnum();
A=g.getEdges();
path=new int[n][n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
path[i][j]=-1;
}
for(k=0;k<n;k++)
{ for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]>(A[i][k]+A[k][j]))
{A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
}
}
class Ppath
{ public void ppath(int path[][],Vector Ves,int i,int j)
{ int k;
k=path[i][j];
if(k==-1)return;
ppath(path,Ves,i,k);
System.out.print(Ves.get(k));
ppath(path,Ves,k,j);
}
}

class Dispath
{ public void dispath(int A[][],int path[][],int n,Vector Ves,Ppath p)
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]==0)
{ if(i!=j)
System.out.print("从"+Ves.get(i)+"到"+Ves.get(j)+"没有符合要求的车次");

}
else
{ System.out.print("从"+Ves.get(i)+"到"+Ves.get(j)+"的路径为:");
System.out.print(Ves.get(i)+",");p.ppath(path,Ves,i,j);System.out.print(Ves.get(j));
}



}


}

class Keyboard
{ static BufferedReader inputStream=new BufferedReader(new InputStreamReader(System.in));
public static int getInteger()
{try{
return(Integer.valueOf(inputStream.readLine().trim()).intValue());

}catch(Exception e)
{
e.printStackTrace();
return 0;
}

}
public static String getString()
{ try{return(inputStream.readLine());
}catch(IOException e){return "0";}
}
}

public class TraffConsults
{ public static void main(String[] args)
{ String[] city={"beijing","tianjin","huhehaote","xuzhou","zhengzhou"};
int[][] route={{0,137,668,0,695},{137,0,0,674,0},{668,0,0,0,0},{0,674,0,0,349},{695,0,0,349,0}};
MGraph g;
g=new MGraph(city,route,5,5);



}





}
...全文
176 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjhlht 2008-03-27
  • 打赏
  • 举报
回复
学习了~~~~~~
hmsuccess 2008-03-27
  • 打赏
  • 举报
回复
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
这样写可以,但是你的首先知道vexnum的大小,一般像这样只有赋值运算,可以直接用clone方法
nihuajie05 2008-03-27
  • 打赏
  • 举报
回复
可以不new的吧...可以通过最简单的赋值方法进行初始化的吧
反正你要用就必须得初始化,这是必然的.很多IDE会强制要求初始化,不然就报错.
定义时初始还是比较安全的,总比总是抛出空指针异常来的好吧
qingkangxu 2008-03-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liang8821 的回复:]
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
这样写对吗?应该怎么写?
[/Quote]
可以这样写!反正一定要new一下的!
liang8821 2008-03-27
  • 打赏
  • 举报
回复
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
这样写对吗?应该怎么写?
liang8821 2008-03-27
  • 打赏
  • 举报
回复
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
这样写对吗?应该怎么写?
hmsuccess 2008-03-26
  • 打赏
  • 举报
回复
main():java.lang.NullPointException 是由于你的多维数组没有初始化就给赋值。
即就是edges is null
hmsuccess 2008-03-26
  • 打赏
  • 举报
回复

import java.io.*;
import java.util.Vector;
class MGraph
{
private Vector ves;
private int[][] edges=null;
private int vexnum,arcnum,i,j;
public MGraph(String[] Initves,int[][]Edges,int m,int n) //m,n分别代表顶点数和弧数
{
ves=new Vector <String>(java.util.Arrays.asList(Initves));
edges = Edges.clone(); //////
for(i=0;i <m;i++)
{
for(j=0;j <m;j++)
{
System.out.println(edges[i][j]);
}
}
vexnum=m;
arcnum=n;
}
public Vector getVes(){return ves;}
public int getVexnum(){return vexnum;}
public int getArcnum(){return arcnum;}
public int[][] getEdges(){int num[][]=new int[vexnum][vexnum];return num;}
public void setEdges(int[][] Edges)
{for(i=0;i <vexnum;i++)
for(j=0;j <vexnum;j++)
{edges[i][j]=Edges[i][j];}
}
public void setVexnum(int aVexnum)
{vexnum=aVexnum;
}
public void setArcnum(int aArcnum)
{arcnum=aArcnum;
}
}


qingkangxu 2008-03-26
  • 打赏
  • 举报
回复
你只是申明了!private int[][] edges;没有new
在[ves=new Vector <String>(java.util.Arrays.asList(Initves)); ]后面new一下

edges = new int[Edges.length][5];

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧