【问题标题】:Arraylist: method won't print last element in arrayArraylist:方法不会打印数组中的最后一个元素
【发布时间】:2020-05-05 08:37:53
【问题描述】:

该方法不打印数组中的最后一个奇数值。我尝试了 array.size() - 1,但无济于事。我做错了什么?

import java.util.ArrayList;
public class Odds
{
    public static void main(String[] args)
    {
        ArrayList<Integer> odds = new ArrayList<Integer>();
        for(int index = 1; index <101; index++)
        {
            odds.add(index);
            removeEvens(odds);
    }
    //call removeEvens on the array above!
}
public static void removeEvens(ArrayList<Integer> array)
{
    for(int i = 0; i < array.size(); i++)
    {
        if (array.get(i)%2 == 0)
        {
            array.remove(i);
            i--;
            System.out.println(array.get(i));
        }
        if(i==array.size())
        {
            System.out.println(array.size() - 1);
        }
    }
}

}

【问题讨论】:

  • "for(..., i &lt; array.size();...) { ... if(i==array.size()) { ... } }" - 注意到什么了吗?
  • 没有线索,我尝试调整 for 循环中的那个符号和小于号无济于事
  • @Turing85 试图指出的是你的 i 永远不会变成 array.size(),因为在第一个 for 循环中你说如果它等于或大于 array.size(),得到在循环之外。
  • 你也在 for 循环中从 i 中减去,这不是非法的,但就我现在而言,这是一种不好的做法
  • 为什么不干脆做:odds.removeIf(i -&gt; i % 2 == 0)

标签: java arraylist methods


【解决方案1】:

在进行此类修改时,我倾向于使用显式迭代器。

        List<Integer> odds = new ArrayList<>(List.of(1,2,3,4,5,6,7));

        Iterator<Integer> it = odds.iterator();
        while(it.hasNext()) {
            if (it.next() % 2 == 0) {
                it.remove();
            }
        }

然后是Streams 版本,它将赔率传递到下游进行收集。

        odds = odds.stream().filter(a->a%2 == 1).collect(Collectors.toList());

两个结果都是

[1, 3, 5, 7]

【讨论】:

    【解决方案2】:

    您应该在代码中解决以下问题:

    1. 不要在循环内调用removeEvens(odds)。在列表初始化后调用它。
    2. 不要显式减小i 的值。

    你应该这样做:

    import java.util.ArrayList;
    
    public class Odds {
        public static void main(String[] args) {
            ArrayList<Integer> odds = new ArrayList<Integer>();
            for (int index = 1; index < 101; index++) {
                odds.add(index);
            }
            removeEvens(odds);
            System.out.println(odds);
        }
    
        public static void removeEvens(ArrayList<Integer> array) {
            for (int i = 0; i < array.size(); i++) {
                if (array.get(i) % 2 == 0) {
                    array.remove(i);
                }
            }
        }
    }
    

    输出:

    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多