提示错误Exception in thread "main" java.lang.NullPointerException

时间:2021-10-30 21:12:21
main文件
public class MMain {
public static void main(String[] args)
{
//try{
Mankey[] mk=new Mankey[100];
Mankey.Inroad(mk);
System.out.println(Mankey.clean(mk));
//}catch(Exception Ex){};

}
}
Mankey文件
public class Mankey {
public int num,prior,next;
public Mankey()
{

}
static void Inroad(Mankey[] m)
{
int last=m.length;
for (int i=0;i<last;i++)
{

m[i].num=i+1;
m[i].prior=i;
m[i].next=i+2;
System.out.println("zhe");
}
m[0].prior=m[last-1].num;
m[last-1].next=m[0].num;
}
static int clean(Mankey[] m )
{
int count=1;
int i=1;
do 
{
if(count==3)
{
m[m[i].prior].next=m[i].next;
m[m[i].next].prior=m[i].prior;
count=1;
}
i=m[i].next;
count++;
 }while(i==m[i].next);
 return (m[i].num);
}
}

提示错误
Exception in thread "main" java.lang.NullPointerException
at Mankey.Inroad(Mankey.java:14)
at MMain.main(MMain.java:7)


为什么报错啊??我看不太懂,,,,刚接触java

14 个解决方案

#1


只创建了数组,没有创建数组里保存的对象.

这两天这个错误好像比较流行.

#2


数组没有初始化

#3


引用 2 楼 coldanimal 的回复:
数组没有初始化


是的呀 我前几天也一直范

#4


楼上说的对~你没有实例化数组~就是没有用new实例化~所以会报你那个异常~

#5


Mankey[] mk=new Mankey[100];
Mankey.Inroad(mk);



数组mk没有初始化(赋值操作)
当然会报空指针了.

#6


请问各给大侠,怎么初始化啊??不是new了就行了吗?初始化指的是赋值?

#7


怎么赋值啊?给其中的数据成员赋值吗?

#8


定义了变量要new 一下

#9


            m[i].num = i + 1;
            m[i].prior = i;
            m[i].next = i + 2;
有这种结构?

#10


Mankey[] mk=new Mankey[100]; <--这个不算new一下??说的细一点行吗??谢了

#11


            m[i].num = i + 1; 
            m[i].prior = i; 
            m[i].next = i + 2; 
这个是要给变量赋值,计算用。

#12


            m[i].num = i + 1; 
            m[i].prior = i; 
            m[i].next = i + 2; 
这个是要给变量赋值,计算用。

#13


你已经初始化了 但是那是空的对象 即NULL
NULL并没有num prior next那些属性 所以当你调用的时候就报空指针异常 

所以你要保证数组内有  Mankey类型的对象 才能对它进行属性操作
OVER

#14


问题解决了,谢谢大家,在main中写入
for(int i=0;i<100;i++)
{
    mk[i]=new Mankey();
}
产生具体对象就行了。

#1


只创建了数组,没有创建数组里保存的对象.

这两天这个错误好像比较流行.

#2


数组没有初始化

#3


引用 2 楼 coldanimal 的回复:
数组没有初始化


是的呀 我前几天也一直范

#4


楼上说的对~你没有实例化数组~就是没有用new实例化~所以会报你那个异常~

#5


Mankey[] mk=new Mankey[100];
Mankey.Inroad(mk);



数组mk没有初始化(赋值操作)
当然会报空指针了.

#6


请问各给大侠,怎么初始化啊??不是new了就行了吗?初始化指的是赋值?

#7


怎么赋值啊?给其中的数据成员赋值吗?

#8


定义了变量要new 一下

#9


            m[i].num = i + 1;
            m[i].prior = i;
            m[i].next = i + 2;
有这种结构?

#10


Mankey[] mk=new Mankey[100]; <--这个不算new一下??说的细一点行吗??谢了

#11


            m[i].num = i + 1; 
            m[i].prior = i; 
            m[i].next = i + 2; 
这个是要给变量赋值,计算用。

#12


            m[i].num = i + 1; 
            m[i].prior = i; 
            m[i].next = i + 2; 
这个是要给变量赋值,计算用。

#13


你已经初始化了 但是那是空的对象 即NULL
NULL并没有num prior next那些属性 所以当你调用的时候就报空指针异常 

所以你要保证数组内有  Mankey类型的对象 才能对它进行属性操作
OVER

#14


问题解决了,谢谢大家,在main中写入
for(int i=0;i<100;i++)
{
    mk[i]=new Mankey();
}
产生具体对象就行了。