Java 删除ArrayList中的所有奇数

Java 删除ArrayList中的所有奇数,java,arraylist,Java,Arraylist,我已经编写了删除ArrayList中所有奇数的代码 import java.util.*; public class Odd { public static void main (String [] args) { ArrayList <Integer> mylist = new ArrayList<>(Arrays.asList(1, 2, 4, 6, 7)); System.out.println(odd(mylist));

我已经编写了删除ArrayList中所有奇数的代码

import java.util.*;

public class Odd {
    public static void main (String [] args) {
        ArrayList <Integer> mylist = new ArrayList<>(Arrays.asList(1, 2, 4, 6, 7));
        System.out.println(odd(mylist));
    }

    public static int odd(ArrayList<Integer> list) {
        if (list.isEmpty()) { throw new Error(); }
        int a = list.get(0);
        List<Integer> toRemove = new ArrayList<>();

        for (int si : list) {
            if (si % 2 != 0) { toRemove.add(si); }
        }

        list.removeAll(toRemove);
        return a;
    }
}
import java.util.*;
公共类奇数{
公共静态void main(字符串[]args){
ArrayList mylist=新的ArrayList(Arrays.asList(1,2,4,6,7));
System.out.println(奇数(mylist));
}
公共静态整数奇数(ArrayList列表){
if(list.isEmpty()){抛出新错误();}
int a=list.get(0);
List toRemove=new ArrayList();
for(int-si:list){
如果(si%2!=0){toRemove.add(si);}
}
列表。删除所有(删除);
返回a;
}
}
但不知何故,结果总是1。有人能指出我的错误吗?提前谢谢你检查这行:

int a=list.get(0);
您只读取列表的第一个元素,即1,而不是遍历它


对每个循环使用迭代器(
),或对循环使用常规的
(使用
列表中的项目计数)

您的代码有两个问题:

(1) 删除奇数后,需要
返回
列表
对象(包含整数)

(2) 为了
返回
列表
,您需要将方法签名从
int
更改为
列表
(作为返回类型):

您可以参考以下带有注释的代码:

//change the method signature to return List<Integer>
public static List<Integer> odd(ArrayList<Integer> list) {
        if (list.isEmpty()) { throw new Error(); }
        List<Integer> toRemove = new ArrayList<>();

        for (int si : list) {
            if (si % 2 != 0) { toRemove.add(si); }
        }

        list.removeAll(toRemove);
        return list;//return list, not int
    }
//将方法签名更改为返回列表
公共静态列表奇数(ArrayList列表){
if(list.isEmpty()){抛出新错误();}
List toRemove=new ArrayList();
for(int-si:list){
如果(si%2!=0){toRemove.add(si);}
}
列表。删除所有(删除);
返回列表;//返回列表,不是int
}

正如其他人所指出的,问题在于您返回的是:

int a = list.get(0);
因此,您将始终获得列表中的第一项,而不管您在检索后对它做了什么


完全摆脱
a
并返回
list
将解决该问题。

您将从列表中返回一个
int
。为什么该方法返回一个
int
?结果应该是什么?目前,您只返回原始列表中的第一项。程序会迭代列表。它将从列表中删除所需的项。唯一的问题是,它与返回的结果之间没有联系。