class EverySum
{
private int a;
private boolean b;
public EverySum(){};
public void changeES(int x,boolean y){a = x;b = y;}
public String toString(){return "sum=" + a + ",and it's a even:" + b;}
}class ImprovedPartialSum
{
private static EverySum[] everysum = new EverySum[10];
private static String[] s=new String[10];
private static final int MAX_INDEX = 10;
public ImprovedPartialSum(){}
public static void main(String[] args)
{
int s = 0;
for(int i =1;i<=MAX_INDEX;i++)
{
s+=i*i;
if(s%2==0)
{
everysum[i-1].changeES(s,true);
s[i-1]="*";
}
else
{
s[i-1]="";
everysum[i-1].changeES(s,false);
}
}
for(int i =1;i<MAX_INDEX+1;i++)
{
System.out.println("["+i+"] "+everysum[i-1]+s[i]);
}
}
}
运行提示NullPointerException at 什么.main<什么.java:33>
求助各位高手告诉我为什么。

解决方案 »

  1.   


        private static EverySum[] everysum = new EverySum[10];
        private static String[] s=new String[10];只是初始化了一个数组,里面的项没有初始化。全是null
      

  2.   

    非常明显的是everysum这个数组里面的每个对象都是null,你调用它里面元素的changeES()方法当然报NullPointerException了,记得要对对象数组的每个元素实例化,其实排错很简单,行数都给你写出来了,一般NullPointerException只会发生在方法调用的时候。
      

  3.   

    java不会自动初始化数据元素,因此在使用前要进行初始化否则空指针错误!