You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何返回空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; 
    }
}
额外优化点
  1. 修正了类名拼写错误:原AlientList改为正确的AlienList;
  2. 简化布尔条件判断:alien.getHumanoid() == true直接写成alien.getHumanoid(),== false写成!alien.getHumanoid(),代码更简洁易读。

内容的提问来源于stack exchange,提问作者Sean Palin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:10:51