如何返回空Vector?getNonHumanoids方法重复返回已移除对象求助
问题根源
你的问题出在成员变量nonHumanoids的复用上:
- 这个Vector是类实例化时创建的全局对象,第一次调用
getNonHumanoids时,找到的非类人Alien被添加进去并返回; - 第二次调用方法时,虽然没有新的匹配对象,但这个Vector里还保留着第一次添加的内容,所以会返回旧数据,不符合“无匹配时返回空Vector”的要求。
修复方案
直接在getNonHumanoids方法内部创建临时Vector,每次调用都生成新的集合,而不是复用全局变量:
public class AlienList { // 移除全局的nonHumanoids成员变量 private Vector<Alien> aliens; /** * Constructor for objects of class AlienList */ public AlienList() { aliens = new Vector<>(); } public void addAlien(Alien alien) { aliens.add(alien); } public void printHumanoids() { for(Alien alien: aliens) { if(alien.getHumanoid()){ // 简化条件判断,== true可以省略 System.out.println(alien.getDetails()); } } } public Vector<Alien> getNonHumanoids() { // 每次调用方法时创建新的Vector Vector<Alien> nonHumanoids = new Vector<>(); Iterator<Alien> it = aliens.iterator(); while(it.hasNext()){ Alien alien = it.next(); if(!alien.getHumanoid()){ // 简化为!表达式,更简洁 it.remove(); nonHumanoids.add(alien); } } return nonHumanoids; } }
额外优化点
- 修正了类名拼写错误:原
AlientList改为正确的AlienList; - 简化布尔条件判断:
alien.getHumanoid() == true直接写成alien.getHumanoid(),== false写成!alien.getHumanoid(),代码更简洁易读。
内容的提问来源于stack exchange,提问作者Sean Palin
相关产品推荐
相关产品推荐

