繁体   English   中英

返回方法定义内的特定数组对象

[英]Returning specific array object within a method definition

我需要确定PredatorList数组中哪个掠食者受到的伤害最大。 由于某种原因,当我尝试返回该捕食者时,eclipse表示mostDamaged无法解析为变量。

为什么会这样呢?

public Predator mostDamagedPredator() {
    // test if PredatorList contains predators
    if (PredatorList.length > 0){
        float difference = 0;
        for (int i = 0; i < PredatorList.length; i++) {
            if (PredatorList[i].getMaxHitPoints() - PredatorList[i].getHitPoints() > difference){
                Predator mostDamaged = PredatorList[i];
            }
        }
        return mostDamaged;  // ERROR - mostDamaged cannot be resolved to a variable
    }
    // return null if there are no predators in PredatorList
    return null;
}

您在if语句块内声明了mostDamaged ,因此它不在该块外的范围内。

将其移到外面:

public Predator mostDamagedPredator() {
    if (PredatorList.length > 0){
        float difference = 0;
        Predator mostDamaged = null;
        for (int i = 0; i < PredatorList.length; i++) {
            if (PredatorList[i].getMaxHitPoints() - PredatorList[i].getHitPoints() > difference){
                mostDamaged = PredatorList[i];
            }
        }
        return mostDamaged; 
    }
    return null;
}

或更好一点:

public Predator mostDamagedPredator() {
    Predator mostDamaged = null;
    if (PredatorList.length > 0){
        float difference = 0;
        for (int i = 0; i < PredatorList.length; i++) {
            if (PredatorList[i].getMaxHitPoints() - PredatorList[i].getHitPoints() > difference){
                mostDamaged = PredatorList[i];
            }
        }
    }
    return mostDamaged;
}

您已在上下文中声明了mostDamaged变量。

声明并在那里初始化:

public Predator mostDamagedPredator() {
// test if PredatorList contains predators
if (PredatorList.length > 0){
    float difference = 0;
    Predator mostDamaged = null;
    for (int i = 0; i < PredatorList.length; i++) {
        if (PredatorList[i].getMaxHitPoints() - PredatorList[i].getHitPoints() > difference){
            mostDamaged = PredatorList[i];
        }
    }
    return mostDamaged;  // ERROR - mostDamaged cannot be resolved to a variable
}
// return null if there are no predators in PredatorList
return null;

}

这是因为mostDamaged是在for循环的if语句中定义的。 这意味着您要在其中返回的变量未定义。

您可以这样重写方法:

public Predator mostDamagedPredator() {
    // test if PredatorList contains predators
    Predator mostDamaged = null; // initialize it with null
    if (PredatorList.length > 0){
        float difference = 0;
        for (int i = 0; i < PredatorList.length; i++) {
            if (PredatorList[i].getMaxHitPoints() - PredatorList[i].getHitPoints() > difference){
                mostDamaged = PredatorList[i]; // assign the correct item from the array
            }
        }
    }
    // either mostDamaged was initialized in the if statement or it is still null
    return mostDamaged;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM