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

Java中Search方法无法在对象ArrayList中查找字符串并统计出现次数

问题根因

  • 匹配判断语句末尾多写了英文分号:if(x.getAnimalClass().contains(animalClass)); 后的分号会让if判断逻辑直接空执行,后续的计数、添加结果集操作完全不受匹配条件约束,每次循环都会执行。
  • if(x instanceof Animal) 逻辑冗余且无意义:遍历的集合本身就是ArrayList<Animal>类型,所有元素都是Animal类/子类实例,所以每次循环都会把当前元素加入结果集,最终返回完整的原集合内容。
  • 计数、结果集添加操作没有归到匹配成功的逻辑块内,只要循环就会触发执行,最终统计结果等于集合总长度。

修正后的代码

private static ArrayList<Animal> searchForAnimalClass(ArrayList<Animal> list, String animalClass){
    ArrayList<Animal> result= new ArrayList<>();
    int count = 0;
    for(Animal x:list) {
        // 移除if末尾的分号,将匹配后需要执行的逻辑放入{}块内
        if(x.getAnimalClass().contains(animalClass)){
            count++;
            result.add(x);
        }
    }
    System.out.println("Number of animals with Animal Class of '" + animalClass + "', is equal to = " + count);
    return result;
}

修正后调用searchForAnimalClass(animalList, "Bird")会正确输出统计值4,返回的结果集仅包含4个Bird类实例。

可选优化

如果需要严格匹配动物类别完全等于输入值,而非模糊包含输入字符串,可以将contains替换为equals,避免误匹配:

if(animalClass.equals(x.getAnimalClass()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:04