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

Java比较ArrayList内Baby姓名 修复findTwoSameBabies方法错误

问题定位

你的findTwoSameBabies方法无法正确判断重名婴儿,存在2个核心逻辑错误,另外代码中平均年龄计算还存在1个隐藏精度问题:

  • 循环冗余嵌套:你额外加了一层遍历列表的增强for循环,两两比较姓名只需要两层索引循环即可,多余的外层循环会造成无意义的重复遍历。
  • 比较对象完全错误:判断重名的条件里,你拿婴儿姓名和babiesList.size()(列表的长度,是int类型整数)做相等判断,根本没有对比两个不同婴儿的姓名,永远不可能得到正确的匹配结果。
  • 平均年龄计算精度丢失:calculateAndPrintBabiesAverageAge方法中两个int类型值做除法时会默认走整数除法,截断小数部分,就算赋值给double类型变量也无法得到正确的浮点结果。
修复后代码

修复后的重名判断方法

private static void findTwoSameBabies(ArrayList<Baby> babiesList) {
    boolean sameBaby = false;
    // 两层循环完成所有两两组合的比较,移除多余的外层增强for循环
    for(int i = 0; i < babiesList.size(); i++) {
        for(int j = i + 1; j < babiesList.size(); j++) {
            // 正确对比i、j两个位置的婴儿姓名
            if(babiesList.get(i).getName().equalsIgnoreCase(babiesList.get(j).getName())) {
                sameBaby = true;
                break;
            }
        }
        if(sameBaby) {
            break;
        }
    }
    
    if(sameBaby) {
        System.out.println("Two babies in the array are the same");
    } else {
        System.out.println("No same baby in the array");
    }
}

修复后的平均年龄计算方法

private static double calculateAndPrintBabiesAverageAge(ArrayList<Baby> babies) {
    int totalAge = 0;
    for (Baby babie : babies) {
        totalAge += babie.getAge();
    }
    // 先把总年龄转为double再做除法,避免整数除法截断小数
    double averageAge = (double) totalAge / babies.size();
    return averageAge;
}
逻辑说明

修复后重名判断逻辑会遍历列表中所有婴儿的两两组合,只要存在任意两个姓名忽略大小写相等的婴儿,就会输出重名提示;遍历完所有组合都没有重名才会输出无重名提示,平均年龄计算也会保留正确的小数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:36:20