【问题标题】:displaying arraylist in inverse反向显示arraylist
【发布时间】:2013-07-23 23:38:24
【问题描述】:

希望有人可以帮助我,我想在我的数组列表中显示我的 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)

【问题讨论】:

  • for(int i=savedPreventivemachineList.size()-1 ; i >-1 ; i--) 也许?你在下降,而不是上升,所以你需要比较直到它得到 0 位置。你的循环将是无止境的(不是真的,直到 outOfBoundsException)

标签: java


【解决方案1】:

您的计数器 i 小于 0。

使用(i &gt; savedPreventivemachineList.size() - 5) &amp;&amp; (i &gt;= 0) 作为条件。

【讨论】:

  • OP 要求列表的最后 5 个对象。 i &gt;= 0 将无法满足此要求。
  • 是的...看到很晚
【解决方案2】:

要将列表的最后 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 &gt;-1 条件来更改循环条件。

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

【讨论】:

  • 老兄,我意识到了错误并发布了正确的解决方案。我希望新的是正确的溶胶。 :P
【解决方案3】:

反条件:

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

将条件设置为i&gt;-1i&gt;=0。请记住大小为List listlist.size() 的索引从0list.size()-1。相反的顺序是list.size()-10,因为计数器isize()-1,size()-2, .... ,2,1,0 em>。

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

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

您可以阅读Iterating through a list in reverse order in java 以获得提示。

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

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

【讨论】:

  • OP 正在请求列表的最后 5 个对象。您的循环按相反的顺序遍历所有列表。
【解决方案4】:

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

  1. 如果数组大小 > 5,则条件“i
  2. 如果数组大小为 5 或更小,“i

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

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

【讨论】:

    【解决方案5】:
    Collections.reverse(savedPreventivemachineList);
    

    然后使用foreach循环。

    【讨论】:

      【解决方案6】:

      您可以使用ListIterator

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

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

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

          我希望这没有错。 :)

          【讨论】:

            猜你喜欢
            • 2019-08-11
            • 2016-07-01
            • 2020-12-09
            • 2013-09-30
            • 2023-04-04
            • 2022-11-28
            • 2013-01-23
            • 2014-04-27
            • 1970-01-01
            相关资源
            最近更新 更多