这是我的调度程序类,用于对arraylist进行排序。我做了一个自定义compareTo方法,返回一个int值为1,-1或0.
private ArrayList<Event> events = new ArrayList<Event>();
public Scheduler(ArrayList<Event> events){
for (int i=0; i<events.size(); i++)
{
this.events.add(events.get(i));
}
}
public ArrayList<Event> getSchedule(){
int i;
int j;
int N = events.size();
for (i = 0; i <=(N-1); i++)
{
for(j = 1; j <= N;j++)
{
if(events.get(i).getEndTime().compareTo(events.get(j).getEndTime()) > 0){
Collections.swap(events, i, j);
}
}
}
return events;
}
我稍后在我的UI类中调用它
Scheduler s = new Scheduler(events);
System.out.println("Schedule:");
for(int i = 0; i<s.getSchedule().size(); i++){
System.out.println(s.getSchedule().get(i));
}
它给了我一个IndexOutofBoundError。为什么它会给我这个错误,我该如何解决呢?
答案 0 :(得分:0)
在getSchedule()
方法中,您正在将i
重复到N-1
,将j
重复到N
,其中N
是列表的大小。 n
对象的列表具有索引0 to n-1
,因此在访问索引n
时,您尝试访问列表的最后一个元素之后的数据,该元素为您提供IndexOutOfBoundException
。
快速解决方案可能是将N
设置为另一个值,该值应为size - 1
:
int N = events.size() - 1;
更好:如果您实施了自定义compareTo()
方法,那么您可以实施Comparable
界面,然后只使用Collections.sort(events)
而不是自己对事件进行排序