【发布时间】:2013-12-08 17:48:10
【问题描述】:
我不是真正的专家,无法弄清楚为什么它会越界
public class ParticipantIndexComparator implements Comparator<Integer> {
final List<Participant> participants;
public ParticipantIndexComparator(ArrayList<Integer> numbersToSort) {
Log.d("MyLog","numbersToSort.size=" + numbersToSort.size());
participants = new ArrayList<Participant>();
for (int i=0;i<numbersToSort.size();i++) {
participants.add(i, competition.participant.get(numbersToSort.get(i)));
participants.get(i).comparator = numbersToSort.get(i);
}
Log.d("MyLog","participants.size="+participants.size());
}
@Override
public int compare(Integer i1, Integer i2) {
Log.d("MyLog","in compare: participants.size=" + participants.size() + "i1=" + i1 + " i2=" + i2);
long l1 = participants.get(i1).kpTime.get(kpSelected);
long l2 = participants.get(i2).kpTime.get(kpSelected);
return Long.valueOf(l1).compareTo(Long.valueOf(l2));
}
}
好吧,我的第一个日志显示participants.size=8.
第二个日志显示participants.size=8.
第三个日志显示我participants.size=8, i1=13 i2=14.
为什么???为什么我每一步都检查尺寸时是 13 和 14,但总是 8 - 我不明白。我不是专家,自己也搞不清楚
这里是堆栈跟踪:
11-24 02:41:23.612: E/AndroidRuntime(4802): java.lang.IndexOutOfBoundsException: Invalid index 14, size is 8
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.ArrayList.get(ArrayList.java:304)
11-24 02:41:23.612: E/AndroidRuntime(4802): at ru.maximhasanov.skitimer.FinalProtocolActivity$ParticipantIndexComparator.compare(FinalProtocolActivity.java:311)
11-24 02:41:23.612: E/AndroidRuntime(4802): at ru.maximhasanov.skitimer.FinalProtocolActivity$ParticipantIndexComparator.compare(FinalProtocolActivity.java:1)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.TimSort.countRunAndMakeAscending(TimSort.java:320)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.TimSort.sort(TimSort.java:185)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.TimSort.sort(TimSort.java:169)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.Arrays.sort(Arrays.java:2038)
11-24 02:41:23.612: E/AndroidRuntime(4802): at java.util.Collections.sort(Collections.java:1891)
11-24 02:41:23.612: E/AndroidRuntime(4802): at ru.maximhasanov.skitimer.FinalProtocolActivity.sortNumbers(FinalProtocolActivity.java:213)
【问题讨论】:
-
能否请您澄清您的日志条目。如果您的第一个日志字符串是
numbersToSort.size=,您的第一个日志条目怎么可能是participants.size=8.?您应该逐步调试以确定您的代码何时停止执行应执行的操作。
标签: java android comparator