0

希望有人可以帮助我,我想在我的数组列表中显示我的 Last 5 对象但是,我的代码有问题:(,需要帮助

   for(int i=savedPreventivemachineList.size()-1 ; i < 5  ; i--)
   {
     Listresult.add(savedPreventivemachineList.indexOf(i), interventionmachine);
   }
   savedPreventivemachineTopList=Listresult;

当我执行它显示我这个错误:

java.lang.IndexOutOfBoundsException: Index: -1, Size: 0
java.util.ArrayList.rangeCheckForAdd(Unknown Source)
java.util.ArrayList.add(Unknown Source)
4

8 回答 8

3

要将列表的最后 5 个对象列出到列表中,循环应该运行五次。

例如,如果列表的大小是 34

最后可访问的索引是 -> 34 - 1 = 33

因此最后五个索引是 -> 33,32,31,30,29

所以 size - 6 = 28 意味着你的循环应该运行到 size -6

这是代码。

for(int i=savedPreventivemachineList.size()-1 ; i > savedPreventivemachineList.size()-6  ; i--)
   {
     Listresult.add(savedPreventivemachineList.indexOf(i), interventionmachine);
   }
   savedPreventivemachineTopList=Listresult;

此外,您应该检查循环索引永远不会变为负值。

为此,请通过添加条件来更改循环i >-1条件。

for(int i=savedPreventivemachineList.size()-1 ; i > savedPreventivemachineList.size()-6 && i >-1 ; i--)
于 2013-07-24T13:15:03.383 回答
3

反转条件:

for(int i=savedPreventivemachineList.size()-1 ; i > -1  ; i--)

将条件设置为i>-1i>=0。记住 aList list的 size:是从到list.size()索引的。相反的顺序将是to ,因为计数器从size()-1,size()-2, .... ,2,1,0逐渐减小。0list.size()-1list.size()-10i

您甚至可以为此目的使用ListIterator ,这样会更安全。

列表的迭代器,允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置始终位于调用 previous() 将返回的元素与调用 next() 将返回的元素之间。

您可以阅读在 java 中以相反顺序遍历列表以获取提示。

我想在我的数组列表中显示我的 Last 5 对象

那么条件应该是((i>savedPreventivemachineList.size()-6) && (i > -1))。因此,您想要最后一个5元素savedPreventivemachineList.size()-6,您需要考虑索引不低于0,因此i>-1

于 2013-07-24T13:11:29.617 回答
3

您的计数器i变得小于 0。

用作(i > savedPreventivemachineList.size() - 5) && (i >= 0)条件。

于 2013-07-24T13:11:56.140 回答
2

您现在的代码可能会导致两种情况:

  1. 如果数组大小 > 5,则条件“i < 5”将在第一次迭代时失败(因为 i 将是 5 或更大)并且您的循环将不执行任何操作。
  2. 如果数组大小为 5 或更小,“i < 5”将永远不会为假,并且循环将永远继续。这失败了,因为当 i 小于 0 时,您超出了数组的范围。

为了解决这个问题: for(int i =savedPreventivemachineList.size()-1 ; i >= 0 && i >= savedPreventivemachineList.size()-5 ; i--)

它现在将倒数,如果 i 变为 -1(故障安全以防止超出索引错误)或 i 小于数组的大小 - 5,则退出循环。(达到第 5 项)

于 2013-07-24T13:23:49.730 回答
1
Collections.reverse(savedPreventivemachineList);

然后使用foreach循环。

于 2013-07-24T13:11:39.263 回答
0

@erencan,谢谢,我意识到了这个错误。:)

int size = list.size()-1;
for(int i=size; i>=(size-5); i--){

我希望这没有错。:)

于 2013-07-24T14:00:01.483 回答
0

你可以使用一个ListIterator

final ListIterator<String> thingIter = things.listIterator(things.size());
for (int i = 0; i < 5 && thingIter.hasPrevious(); ++i) {
    final String thing = thingIter.previous();
}

我认为这更清楚一点,因为没有递减循环。

于 2013-07-24T13:15:04.337 回答
0

java.lang.IndexOutOfBoundsException:索引:-1,大小:0 显示 IndexOutOfBoundsException

简单地int i=savedPreventivemachineList.size()-1是 -1 即savedPreventivemachineList.size()Zero

前向迭代

for(Iterator<String> iter = savedPreventivemachineList.iterator(); iter.hasNext(); ) {
  String item = iter.next();
  //item do what u want
}

向后迭代

for(int i=savedPreventivemachineList.size()-1 ; i >= 0  ; i--)

如果是列表

List<String> orderList = *****
List<String> reverseList = Lists.reverse(orderList);
于 2013-07-24T13:16:01.050 回答