找到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,不存在越界的问题。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!