gpt4 book ai didi

Java 安卓 : Comparator gets OutOfBoundsException

转载 作者:行者123 更新时间:2023-11-29 21:26:47 24 4
gpt4 key购买 nike

我不是专家,不知道为什么会越界

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持有 competition.participant 子集的数字列表(本质上是索引)您想要按特定 kpTime 排序.

如果这是正确的,那么你得到 OutOfBoundsException 的原因是因为你的numbersToSort包含大于 participants 大小的数字(索引) , 作为 participants是更大列表的子集。

我相信你应该做的是创建你的 ArrayList<Participant> participants sortNumbers FinalProtocolActivity的方法| , 然后调用 Collections.sort()在上面加上以下 Comparator :

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);
}
}

关于Java 安卓 : Comparator gets OutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com