同样是判断团队中是否人数够,为什么下面我注释的那个方法就不行,比如我先添加两个设计师再添加一个架构师上面运行就没问题,下面就报已有设计师两名异常


    //获取团队中已有的架构师,设计师,程序员的人数
        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("已有程序员三名");

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