该方法不打印数组中的最后一个奇数值。我尝试了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);
        }
    }
}

}

最佳答案

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


不要在循环内调用removeEvens(odds)。列表初始化后调用它。
不要显式减小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]

08-16 22:07