我编的程序:class Customer
{
public int order=0;
public String arrearlytime="";
public String arrlatetime="";
public Customer next=null;
public Customer()
{
}
public Customer(int order,String arrearlytime,String arrlatetime)
{
this.order=order;
this.arrearlytime=arrearlytime;
this.arrlatetime=arrlatetime;
}
}
//定义customer对象,序列号order,最早时间窗arrearlytime,最迟时间窗arrlatetime,规定变量的赋值方式class CustomerQueue
{
public Customer cqFront;
public Customer cqRear;

public void initializeCq()
{
cqFront=null;
cqRear=null;
}//初始化队列

public void addQueue(int neworder,String newarrearlytime,String newarrlatetime) 
{
Customer newCustomer=new Customer();

newCustomer.order=neworder;
newCustomer.arrearlytime=newarrearlytime;
newCustomer.arrlatetime=newarrlatetime;
newCustomer.next=null;

if(cqFront==null)
{
cqFront=newCustomer;
cqRear=newCustomer;
}
else
{
cqRear.next=newCustomer;
cqRear=cqRear.next;
}
}//在队列的末尾添加一个新元素

public void deleteQueue()
{
if(cqFront==null)System.out.println("已经没有顾客了!");
else
{
cqFront=cqFront.next;
if(cqFront==null)cqRear=null;
}
}//在队列的队头删除一个元素
}//队列类,具有队列初始化,队列增减元素class VRP
{
public static boolean isIntersection(Customer cus,Customer cuscmp)
{
if(cuscmp.arrearlytime.compareTo(cus.arrearlytime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrearlytime)>=0)
return true;
else if(cuscmp.arrearlytime.compareTo(cus.arrlatetime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrlatetime)>=0)
return true;
else if(cus.arrearlytime.compareTo(cuscmp.arrearlytime)<=0&&
cus.arrlatetime.compareTo(cuscmp.arrearlytime)>=0)
return true;
else return false;//对字符串来说
/*if(cuscmp.arrearlytime<=cus.arrearlytime<=cuscmp.arrlatetime)
return cuscmp.order;
else if(cuscmp.arrearlytime<=cus.arrlatetime<=cuscmp.arrlatetime)
return cuscmp.order;
else if(cus.arrearlytime<=cuscmp.arrearlytime<=cus.arrlatetime)
return cuscmp.order;
else ruturn 0;//对数来说*/
}
//比较两个顾客的时间窗是否有交集,有交集返回被比较顾客的序号,否则返回0,cus是被比较对象

public static Customer Unite(Customer cus,Customer cuscmp)
{
if(cuscmp.arrearlytime.compareTo(cus.arrearlytime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrearlytime)>=0)
{
if(cus.arrlatetime.compareTo(cuscmp.arrlatetime)>=0)
{
cuscmp.arrearlytime=cus.arrearlytime;
return cuscmp;
}
else
{
return cus;
}
}
else if(cuscmp.arrearlytime.compareTo(cus.arrlatetime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrlatetime)>=0)
{
cuscmp.arrlatetime=cus.arrlatetime;
return cuscmp;
}
else if(cus.arrearlytime.compareTo(cuscmp.arrearlytime)<=0&&
cus.arrlatetime.compareTo(cuscmp.arrlatetime)>=0)
{
return cuscmp;
}
else return null;
}//比较并缩小范围

//public void cusIntlist()
public static void main(String arg[])
{
CustomerQueue firstarray=new CustomerQueue();
firstarray.initializeCq();

//测试点初始化
firstarray.addQueue(1,"8:00","9:00");
firstarray.addQueue(2,"8:35","9:15");
firstarray.addQueue(3,"9:00","9:45");
firstarray.addQueue(4,"7:30","8:40");
firstarray.addQueue(5,"10:00","11:00");
firstarray.addQueue(6,"10:20","11:00");
firstarray.addQueue(7,"12:00","13:00");
firstarray.addQueue(8,"13:00","13:10");
firstarray.addQueue(9,"14:00","15:20");
firstarray.addQueue(10,"15:00","16:00");
//测试点初始化

CustomerQueue thirdarray[]=new CustomerQueue[firstarray.cqRear.order];//生成第三个数组队列

Customer cuspoint1;
Customer cuspoint2;
//对最外层队列操作起点
cuspoint1=firstarray.cqFront;
cuspoint2=firstarray.cqFront.next; CustomerQueue secondarray=new CustomerQueue();
secondarray.initializeCq();

while(cuspoint2!=null)
{
if(isIntersection(cuspoint1,cuspoint2))
secondarray.addQueue(cuspoint2.order,cuspoint2.arrearlytime,cuspoint2.arrlatetime);
cuspoint2=cuspoint2.next;
}//生成有交集的顾客点集

//第二个数组操作
//Customer cuspt2=secondarray.cqFront.next;

thirdarray[cuspoint1.order]= new CustomerQueue();//真正创建一个新第三个数组
thirdarray[cuspoint1.order].initializeCq();

//Customer cus1=null;
Customer custp;
thirdarray[cuspoint1.order].addQueue(cuspoint1.order,cuspoint1.arrearlytime,cuspoint1.arrlatetime);
Customer cus1=thirdarray[cuspoint1.order].cqFront;
while(secondarray.cqFront!=null)
{
//System.out.println(thirdarray[cuspoint1.order].cqFront.order);
//System.out.println(cus1.order);
//if(cus1==null)cus1=cus1.next;
//if(cus1==null)cus1=thirdarray[cuspoint1.order].cqFront;
//System.out.println(cus1.order);
//System.out.println(secondarray.cqFront.order);
Customer cuspt1=secondarray.cqFront;
Customer cuspt2=secondarray.cqFront;                        while(cuspt1!=null)
                        {
                         if(isIntersection(cus1,secondarray.cqFront))
                         {
                         custp=Unite(cus1,cuspt1);
                         secondarray.deleteQueue();
                         thirdarray[cuspoint1.order].addQueue(custp.order,custp.arrearlytime,custp.arrlatetime);
                         cus1=cus1.next;
                         }
                         else
                         {
                         while(cuspt1!=null)
                         {
                         cuspt2=cuspt1;
                         cuspt1=cuspt1.next;                        
                         if(isIntersection(cus1,cuspt1))
                         {
                         custp=Unite(cus1,cuspt1);
                         thirdarray[cuspoint1.order].addQueue(custp.order,custp.arrearlytime,custp.arrlatetime);
                         cus1=cus1.next;
                         cuspt2.next=cuspt1.next;
                         cuspt1=cuspt2;
                         }
                                 }
                         }
                        }
}

}
}
运行时出现错误提示:
Exception in thread "main" java.lang.NullPointerException
        at VRP.isIntersection(VRP.java:67)
        at VRP.main(VRP.java:176)
可是我isIntersection(cus1,secondarray.cqFront)中的cus1和secondarray.cqFront都有值呀,为什么还出现这样的空指针的提示呢?谢谢!