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