【发布时间】:2013-03-20 02:34:19
【问题描述】:
我正在编写一个将约会存储在 ArrayList 中的程序。要求用户输入约会的日期、开始时间和结束时间。程序需要在用户想要提交新约会时检查是否已经有约会。这是递归二进制搜索部分。这是我目前已经实现的。
方法:
public boolean overlap(ArrayList<Appointment> list, int start, int end,
Calendar startCal, Calendar endCal)
{
int middle = (start + end)/2;
System.out.println("Start: " + start + " End: " + end + " Middle: " + middle);
Appointment appt = list.get(middle);
if(start == end){
return((startCal.compareTo(appt.getStart()) >= 0 && startCal.compareTo(appt.getEnd()) <= 0 ) ||
endCal.compareTo(appt.getEnd()) <= 0 && endCal.compareTo(appt.getStart()) >= 0 );
}
else if(startCal.compareTo(appt.getStart()) <= 0 && endCal.compareTo(appt.getStart()) <= 0){
return overlap(list, start, middle - 1, startCal, endCal);
}
else{
return overlap(list, middle, end, startCal, endCal);
}
}
我怎么称呼它:
case 1 : //Enter a new appointment
setCal();
startDate = new GregorianCalendar(year, month, day, hour, minute);
endDate = new GregorianCalendar(year, month, day, endHour, endMinute);
appt = new Appointment(description, startDate, endDate);
if(apptList.isEmpty()){
apptList.add(appt);
}
else{
boolean isOverlap = overlap(apptList, 0, apptList.size() - 1,
appt.getStart(), appt.getEnd());
if(isOverlap){
System.out.println("");
System.out.println("ERROR: There is already an appointment at that time");
System.out.println("");
}
else{
int indexToBeAdded = indexFinder(apptList, 0, apptList.size() -1,
appt.getStart(), appt.getEnd());
Appointment tmp = apptList.get(indexToBeAdded);
if(tmp.start.compareTo(appt.start) < 0){
apptList.add(indexToBeAdded + 1, appt);
}
else{
apptList.add(indexToBeAdded , appt);
}
}
}
choice = 0;
break;
setCal() 只是提示用户输入所有日历参数并根据他们输入的内容进行设置。此外,indexFinder 是另一种递归二进制搜索方法,它查找应添加约会的索引,以便将约会添加到正确的顺序。
截至第三次约会时,我尝试添加时遇到堆栈溢出异常。
感谢您的帮助
【问题讨论】:
-
您的具体问题是什么?
-
1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 你的问题是什么?
-
我的具体问题是,一旦我尝试添加的第三个约会,我无法弄清楚为什么会出现堆栈溢出错误
-
我想
middle -> start = 0,end != 0。当然,输出 which is not included 应该准确地说明错误递归的内容。 (这就是我给 -1 的原因:我们无法读取您的控制台。) -
当询问有关错误的问题时,发布错误;问题应该是“为什么我在这段代码中出现这个错误”,包含完整的堆栈跟踪、您提供的输入以及输出的输出。即便如此,你也必须让它变得有趣;人们不想为你调试。为什么你确定你的代码是正确的?您是如何尝试解决的?