我试图在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”
答案 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;
然后,您还可以删除theMostEvilMinion
和maxEvilLevel
实例变量。