java:打印排序的arrayList给了我IndexOutofBoundsException

时间:2016-12-03 21:59:59

标签: java arraylist indexoutofboundsexception

这是我的调度程序类,用于对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。为什么它会给我这个错误,我该如何解决呢?

1 个答案:

答案 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)而不是自己对事件进行排序