Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:Comparator脱离边界异常_Java_Android_Comparator - Fatal编程技术网

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,但您正试图获得1314元素。这怎么可能。这是你的问题

好吧,我来试试。我想我有点了解你的情况

正如我在评论中所说,我认为
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);
    }
}