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
相关产品推荐
相关产品推荐

