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

不使用ArrayList实现数组删除元素,不存在的ID也提示删除成功如何解决

问题根因分析
  • 未判断目标ID是否真实存在于数组成员中:当前代码无论是否找到匹配ID,都会直接创建长度为原数组长度-1的新数组,即便没有命中要删除的ID,返回的数组也会比原数组长度少1位,最后一位未赋值为null,调用方无法根据返回结果判断是否真的执行了删除,就会出现无论传什么ID都提示删除成功的问题。
  • 未处理边界异常:如果原数组成员为空时调用方法,会直接抛出NegativeArraySizeException数组长度为负的异常;如果数组成员的ID存在null值,调用equals方法对比时会触发空指针异常。
修复方案(纯数组实现,未使用ArrayList)
public Members[] deleteMembers(String id) {
    // 入参或原数组为空直接返回原数组
    if (id == null || member == null || member.length == 0) {
        return member;
    }
    // 先统计匹配到的目标ID数量,同时规避空指针风险
    int matchCount = 0;
    for (Members m : member) {
        if (id.equals(m.getId())) {
            matchCount++;
        }
    }
    // 没有匹配到目标ID,直接返回原数组,调用方可通过返回值与原数组是否相等判断删除结果
    if (matchCount == 0) {
        return member;
    }
    // 按实际要删除的数量创建新数组
    Members[] copyId = new Members[member.length - matchCount];
    for (int i = 0, k = 0; i < member.length; i++) {
        // 用入参id调用equals,避免成员id为null时空指针
        if (id.equals(member[i].getId())) {
            continue;
        }
        copyId[k++] = member[i];
    }
    return copyId;
}
调用侧判断逻辑参考

在调用deleteMembers方法的位置,通过判断返回数组和原数组是否为同一个对象,即可确认是否真的执行了删除:

Members[] newMembers = deleteMembers(inputId);
if (newMembers == member) {
    System.out.println("输入的ID不存在,删除失败");
} else {
    member = newMembers;
    System.out.println("ID删除成功");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:04