2016-09-25 98 views
1

我需要確定我的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; 
} 
+0

您可以改寫這樣的方法。 –

+0

順便說一句,這可以全部寫成Arrays.stream(PredatorList).max(Comparator.comparing(p - > p.getMaxHitPoints() - p.getHitPoints()))''。此外,在Java中,我們使用'camelCase'作爲變量,'PascalCase'作爲類的儲備 - 請**總是**遵循這個約定。 –

回答

1

您宣佈mostDamagedif語句塊裏面,所以它不是塊外範圍之內。外

移動它:

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; 
} 
+0

我試過這個,但是if語句中的'mostDamaged'變量變成了一個重複的局部變量,所以當我返回'mostDamaged'時,它返回null。 – BobSacamano

+1

@BobSacamano請注意,您不需要在if語句內重新聲明'mostDamaged',只需指定它。看到我的答案中的代碼。 – Eran

+0

我明白了。乾杯! – BobSacamano

1

您已經聲明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; 

}

0

這是因爲mostDamaged是您for循環if聲明中定義。這意味着你想返回它的地方變量沒有被定義。因爲沒有一個叫做'mostDamaged`變量

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; 
} 
相關問題