学完异常之后,出现了以下看题时的困惑,如果抛完异常就是结束方法那么请看我上一个问题,抛完异常后还在执行后面的else if

找到memberId都能理解接下来怎么运行,没找到那后面的覆盖循环我觉得也能执行,在这里我假如total=3在第一个遍历循环中没找到那么就是i=3结束循环抛完异常后继续执行下个循环,我感觉就能报角标越界或者空指针异常,但是这里运行起来没问题


public void removeMember(int memberId) throws TeamException {
        int i = 0;
        for(;i < total;i++) {
            if(team[i].getMemberId() == memberId) {
                team[i].setStatus(Status.FREE);
                break;
            }
        }
        //未找到memberId的情况
        if(i == total) {
            throw new TeamException("未找到memberId的员工,删除失败");
        }
        //后一个元素覆盖前一个元素,实现删除
        for(int j = i + 1;j < total;j++) {
            team[j - 1] = team[j];
        }

代码没什么问题啊
你如果未找到memberId的情况,上一个循环是正常结束, 循环之后i会等于total,执行 throw 抛出异常就跳出函数了, 之后的删除元素循环就不执行了.
如果找到memberId的情况,上一个循环是用break结束, 循环之后i不等于total,就不执行 throw 了, 这时才执行删除元素的循环.

throw new TeamException("未找到memberId的员工,删除失败");

抛出异常,程序就退出了,不往下执行了。

这里不会报错的,因为j的最大值就是2,不存在越界的问题。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632