Java Arraylist:method-won';t打印数组中的最后一个元素

Java Arraylist:method-won';t打印数组中的最后一个元素,java,arraylist,methods,Java,Arraylist,Methods,该方法不打印数组中的最后一个奇数值。我尝试了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; inde

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

}
import java.util.ArrayList;
公共类赔率
{
公共静态void main(字符串[]args)
{
ArrayList赔率=新ArrayList();

对于(int index=1;index,您应该在代码中解决以下问题:

  • 不要在循环中调用
    removevens(赔率)
    。在列表初始化后调用它
  • 不要显式减小
    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);
                }
            }
        }
    }
    

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

  • 不要在循环中调用
    removevens(赔率)
    。在列表初始化后调用它
  • 不要显式减小
    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);
                }
            }
        }
    }
    

    在进行这种修改时,我倾向于使用显式迭代器

            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();
                }
            }
    
    这两个结果都是正确的

    [1,3,5,7]


    在进行这种修改时,我倾向于使用显式迭代器

            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();
                }
            }
    
    这两个结果都是正确的

    [1,3,5,7]


    对于(…,i
    ”-注意到什么?没有线索,我尝试将for循环中的该符号和小于符号调整为无效@Turing85试图指出的是,您的i永远不会成为array.size(),因为在第一个for循环中,您说它是否等于或大于array.size(),请退出循环。另外,您在for循环中从i中减去i,这不是非法的,但就我而言,这是一个糟糕的做法。为什么不干脆这样做:
    赔率.removeIf(i->i%2==0)
    ?“
    for(…,i
    “-注意到什么了吗?一点线索也没有,我尝试将for循环中的该符号和小于符号调整为无效@Turing85试图指出的是,您的I永远不会成为array.size(),因为在第一个for循环中,您说它是否等于或大于array.size(),退出循环。另外,你在for循环中从i中减去i,这不是非法的,但就我而言,这是一个糟糕的做法。为什么不干脆这样做:
    几率。移除(i->i%2==0)