Java 删除ArrayList中的所有奇数
我已经编写了删除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));
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
?结果应该是什么?目前,您只返回原始列表中的第一项。程序会迭代列表。它将从列表中删除所需的项。唯一的问题是,它与返回的结果之间没有联系。