//获取团队中已有的架构师,设计师,程序员的人数
int numOfArch = 0,numOfDes = 0,numOfPro = 0;
for(int i = 0;i < total;i++) {
if(team[i] instanceof Architect) {
numOfArch++;
}else if(team[i] instanceof Designer) {
numOfDes++;
}else if(team[i] instanceof Programmer) {
numOfPro++;
}
}
if(p instanceof Architect) {
if(numOfArch >= 1) {
throw new TeamException("已有架构师一名");
}
}else if(p instanceof Designer) {
if(numOfDes >= 2) {
throw new TeamException("已有设计师二名");
}
}else if(p instanceof Programmer) {
if(numOfPro >= 3) {
throw new TeamException("已有程序员三名");
}
}
//if(p instanceof Architect && numOfArch >= 1){
// throw new TeamException("已有架构师一名");
// }else if(p instanceof Designer && numOfDes >= 2) {
// throw new TeamException("已有设计师二名");
// }else if(p instanceof Programmer && numOfPro >= 3) {
// throw new TeamException("已有程序员三名");
// }
两段代码完全不同的啊。
第一段代码,if...else的条件是新加入的人的职位是什么。
第二段代码,if...else的条件是新加入的人的职位以及该职位的人数。
当你新加入架构师时,第一段程序会进行 if(p instanceof Architect) 函数段,不会进入另外两个else函数段。但第二段程序,由于架构师还没有,所以不会进入第一个if,会判断第二个else if。为什么第二个else if会成立,应该是你的类继承关系的原因吧。架构师的父类是设计师,设计师父类是程序员,所以p如果是架构师,同时它也满足是设计师,也满足是程序员
看代码应该没有问题,你可以debug调试一下,看看变量的值是否符合预期。
你下面注释的代码的逻辑不对,不应该用if else if语句,应该都是if语句,如下:
if(p instanceof Architect && numOfArch >= 1)
throw new TeamException("已有架构师一名");
if(p instanceof Designer && numOfDes >= 2)
throw new TeamException("已有设计师二名");
if(p instanceof Programmer && numOfPro >= 3)
throw new TeamException("已有程序员三名");
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!