2016-09-25 11 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

あなたは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; 
} 
+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; 
} 
関連する問題