我试图在ArrayList“小黄人”中找到具有最高“ evilLevel”(在另一个类中定义)的元素。

public Minion(String name, int evilLevel, boolean onMission) - from class Minion


    private Set<Minion> minions;
    int maxEvilLevel = 0;
    Minion theMostEvilMinion;

     public MinionRegister(){


        minions = new HashSet<Minion>();
      }

     public Minion getMostEvilMinion(){
        if(minions.isEmpty()){
            return null;
        }


        for(Minion m : minions){
            if(m.getEvilLevel() > maxEvilLevel) {
                maxEvilLevel = m.getEvilLevel();
                Minion theMostEvilMinion = m;
            }
        }
        return theMostEvilMinion;
    }


不幸的是,该方法返回“ null”

最佳答案

这里:

for(Minion m : minions){
    if(m.getEvilLevel() > maxEvilLevel) {
        maxEvilLevel = m.getEvilLevel();
        Minion theMostEvilMinion = m;
    }
}
return theMostEvilMinion;


for循环中,您声明并设置一个局部变量theMostEvilMinion,然后将其遗忘,因为它是在该块内声明的。

然后在循环之后,返回实例变量theMostEvilMinion,这是在类顶部声明的另一个变量。

您需要声明并设置一个局部theMostEvilMinion变量,然后将其返回。

Minion theMostEvilMinion = null;
int maxEvilLevel = 0;
for (Minion m : minions) {
    if (m.getEvilLevel() > maxEvilLevel) {
        maxEvilLevel = m.getEvilLevel();
        theMostEvilMinion = m;
    }
}
return theMostEvilMinion;


然后,您也可以删除theMostEvilMinionmaxEvilLevel实例变量。

10-08 01:46