比较ArrayList中的元素值

时间:2019-03-27 16:36:00

标签: java arrays

我试图在ArrayList“ minions”中找到具有最高“ 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”

1 个答案:

答案 0 :(得分:2)

这里:

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实例变量。