使用Java内部类导致的空指针异常?

HJMing123 2017-05-09 06:22:04
这里我想要Java实现Prim算法,但是这里的总是报出空指针异常,不知道是怎么回事?
public class Test
{
class HighCost
{
public HighCost()
{
highcost=0;
belong=0;
}

public double highcost;
public int belong;

}

public void prim(double [][]matrix, int length)
{



HighCost [] treenodes =new HighCost[length];

int index=0;
int flag=0;
double max=0;

double [] nodes=new double[length];


for(int i=0;i<length;i++)
{
treenodes[i].highcost=matrix[0][i]; //空指针异常
treenodes[i].belong=index; //空指针异常
}

nodes[index]=-1;
index++;

for(int l=0;l<length;l++)
{

for(int j=0;j<length;j++)
{
if(treenodes[j].highcost>max)
{
flag = j;
max = treenodes[j].highcost;
nodes[index] = treenodes[j].belong;

}
}
index++;

for(int k=0;k<length;k++)
{
if(matrix[flag][k]>treenodes[k].highcost)
{
treenodes[k].highcost = matrix[flag][k]; //空指针异常
treenodes[k].belong=flag; //空指针异常
}
}
}
for(double m:nodes)
{
System.out.println(m);
}

}
...全文
467 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HJMing123 2017-05-10
  • 打赏
  • 举报
回复
引用 1 楼 qq_35209952 的回复:
好像很酷 不知道prim是什么. 空指针可以debug呀 .哈哈哈哈. 哪里空指针 一般就是点 前面的东西有问题 但是为啥你标记了那么多个.. HighCost [] treenodes =new HighCost[length]; 你new的数组 但是只有长度 里面都是空的呀
我在主函数里面是这样调用的:
 public static void main(String[] args) throws Exception
  {  
	  double[][] matrix =new double[][]
	   {{0,1,3,2},
		{1,0,4,1},
		{3,4,0,5},
		{2,1,5,0}};
		
		new Test().prim(matrix,matrix.length);
  }
另外,我定义内部类的时候已经把belong和highcost等于0了呀,初始化后的数组难道不应该是是n个HighCost对象,里面的highcost和belong不是等于0吗?谢谢
逗泥丸的平方 2017-05-10
  • 打赏
  • 举报
回复
其实你debug一下就看到了.. 你debug到这个的下一行 HighCost [] treenodes =new HighCost[length]; 然后看看treenodes 里面装了些什么
逗泥丸的平方 2017-05-10
  • 打赏
  • 举报
回复
引用 3 楼 HJMing123 的回复:
[quote=引用 1 楼 qq_35209952 的回复:] 好像很酷 不知道prim是什么. 空指针可以debug呀 .哈哈哈哈. 哪里空指针 一般就是点 前面的东西有问题 但是为啥你标记了那么多个.. HighCost [] treenodes =new HighCost[length]; 你new的数组 但是只有长度 里面都是空的呀
我在主函数里面是这样调用的:
 public static void main(String[] args) throws Exception
  {  
	  double[][] matrix =new double[][]
	   {{0,1,3,2},
		{1,0,4,1},
		{3,4,0,5},
		{2,1,5,0}};
		
		new Test().prim(matrix,matrix.length);
  }
另外,我定义内部类的时候已经把belong和highcost等于0了呀,初始化后的数组难道不应该是是n个HighCost对象,里面的highcost和belong不是等于0吗?谢谢[/quote] HighCost [] treenodes =new HighCost[length]; 看这句话.你贴出来的代码的21行. 你的代码一直在用这个数组啊. 好吧.. 如果你不明白的话.. 这样说吧, 你要循环一下 然后把数组每个下标对应的值都填充成一个 new HighCost()
zy_arhahaha 2017-05-10
  • 打赏
  • 举报
回复
HighCost [] treenodes =new HighCost[length]; 你这定义的是一个空的数组,里面没有对象,都是null
  • 打赏
  • 举报
回复
如果数组的内容较多,并且想要实现动态的增减,建议使用ArrayList类 你的问题应该是数组初始化的问题,传入的matrix有进行初始化吗?或者说你使用Double类创建的?
逗泥丸的平方 2017-05-09
  • 打赏
  • 举报
回复
好像很酷 不知道prim是什么. 空指针可以debug呀 .哈哈哈哈. 哪里空指针 一般就是点 前面的东西有问题 但是为啥你标记了那么多个.. HighCost [] treenodes =new HighCost[length]; 你new的数组 但是只有长度 里面都是空的呀

62,628

社区成员

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

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