程序如下:
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 int isIntersection(Customer cus,Customer cuscmp)
{
if(cuscmp.arrearlytime.compareTo(cus.arrearlytime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrearlytime)>=0)
return cuscmp.order;
else if(cuscmp.arrearlytime.compareTo(cus.arrlatetime)<=0&&
cuscmp.arrlatetime.compareTo(cus.arrlatetime)>=0)
return cuscmp.order;
else if(cus.arrearlytime.compareTo(cuscmp.arrearlytime)<=0&&
cus.arrlatetime.compareTo(cuscmp.arrearlytime)>=0)
return cuscmp.order;
else return 0;//对字符串来说
/*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

//public void cusIntlist()
public static void main(String arg[])
{
CustomerQueue firstarray=new CustomerQueue();
CustomerQueue secondarray=new CustomerQueue();
firstarray.initializeCq();
secondarray.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");
//测试点初始化

Customer cuspoint1;
Customer cuspoint2;

cuspoint1=firstarray.cqFront;
cuspoint2=firstarray.cqFront.next;

while(cuspoint2!=null)
{
if(isIntersection(cuspoint1,cuspoint2)!=0)
secondarray.addQueue(cuspoint2.order,cuspoint2.arrearlytime,cuspoint2.arrlatetime);
} Customer cus1=secondarray.cqFront;
while(cus1!=null)
{
System.out.print(cus1.order+",");
System.out.print(cus1.arrearlytime+",");
System.out.println(cus1.arrlatetime+",");
cuspoint1=cus1.next;
}


}
}
编译没有问题,运行时出现:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at CustomerQueue.addQueue(VRP.java:33)
        at VRP.main(VRP.java:117)
只是创建了两个队列就出现了这个错误,不知道怎么解决?谢谢大家!

解决方案 »

  1.   

    while(cuspoint2!=null) 

    if(isIntersection(cuspoint1,cuspoint2)!=0) 
    secondarray.addQueue(cuspoint2.order,cuspoint2.arrearlytime,cuspoint2.arrlatetime); 
    } Customer cus1=secondarray.cqFront; 
    while(cus1!=null) 

    System.out.print(cus1.order+","); 
    System.out.print(cus1.arrearlytime+","); 
    System.out.println(cus1.arrlatetime+","); 
    cuspoint1=cus1.next; 

    你这两个循环都是死循环,值都是不为空的。当然没有内存了。
    secondarray.addQueue(cuspoint2.order,cuspoint2.arrearlytime,cuspoint2.arrlatetime); 
    中addQueue函数里有 new new CustomerQueue(); 
    无限循环分内存。