Java Android:Comparator脱离边界异常
我不是一个真正的专家,也不明白为什么它会越界Java Android:Comparator脱离边界异常,java,android,comparator,Java,Android,Comparator,我不是一个真正的专家,也不明白为什么它会越界 public class ParticipantIndexComparator implements Comparator<Integer> { final List<Participant> participants; public ParticipantIndexComparator(ArrayList<Integer> numbersToSort) { Log.d
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));
}
}
正如您所解释的,您的
参与者
大小
为8,但您正试图获得13和14元素。这怎么可能。这是你的问题 好吧,我来试试。我想我有点了解你的情况
正如我在评论中所说,我认为numbersToSort
包含了竞赛的一个子集的数字列表(本质上是索引)。参与者
,您希望按照特定的kpTime
进行排序
如果这是正确的,那么您获得边界外异常的原因是因为您的numbersToSort
包含的数字(即索引)大于参与者的大小,因为参与者
是更大列表的子集
我认为您应该做的是在FinalProtocolActivity
的sortNumbers
方法中创建ArrayList参与者
,然后使用以下比较器对其调用Collections.sort()
:
public class ParticipantIndexComparator implements Comparator<Participant>
{
public int compare(Participant p1, Participant p2)
{
Long time1 = p1.kpTime.get(kpSelected);
Long time2 = p2.kpTime.get(kpSelected);
return Long.valueOf(time1).compareTo(time2);
}
}
公共类ParticipantIndexComparator实现Comparator
{
公共整数比较(参与者p1、参与者p2)
{
longtime1=p1.kpTime.get(kpSelected);
longtime2=p2.kpTime.get(kpSelected);
返回Long.valueOf(time1)。与(time2)比较;
}
}
是的,但是13号和14号是从哪里来的??我无法理解我在这里附上的代码-比较器怎么可能包含13和14个元素?您能澄清一下您的日志条目吗。如果您的第一个日志字符串是numbersToSort.size=
,那么您的第一个日志条目怎么可能是participants.size=8.
?您应该一步一步地调试,以确定代码何时停止执行它应该执行的操作。我必须将我的ArrayList索引排序为ArrayList对象,这些对象保存了需要排序的时间值。因此,我在我的对象中存储了一个额外的初始索引值,按照您的建议对对象进行排序,并制作了另一个索引数组列表,我从该额外值中提取:))这是一个疯狂的方案,但evrything现在可以工作了。:)嗯,我还是不明白为什么它是排名第13和第14的指数。。
public class ParticipantIndexComparator implements Comparator<Participant>
{
public int compare(Participant p1, Participant p2)
{
Long time1 = p1.kpTime.get(kpSelected);
Long time2 = p2.kpTime.get(kpSelected);
return Long.valueOf(time1).compareTo(time2);
}
}