2016-09-25 6 views
1

Ich muss bestimmen, welcher Predator in meinem PredatorList Array den meisten Schaden erhalten hat. Aus irgendeinem Grund, wenn ich versuche diesen Räuber zurückzubringen, sagt Eclipse - mostDamaged kann nicht in eine Variable aufgelöst werden.Rückgabe spezifisches Array-Objekt innerhalb einer Methodendefinition

Warum ist das so?

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

Da es keine Variable 'mostDamaged' genannt wird. –

+0

Übrigens kann dies alles geschrieben werden als 'Arrays.stream (PredatorList). Max (Comparator.comparing (p-> p.getMaxHitPoints() - p.getHitPoints())). Außerdem verwenden wir in Java 'camelCase' für Variablen,' PascalCase' sind Reserven für Klassen - bitte ** immer ** bleibe bei dieser Konvention. –

Antwort

1

Sie erklärt mostDamaged innerhalb eines if Anweisungsblock, es ist so außerhalb dieses Blocks nicht im Anwendungsbereich.

Move it außen:

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

oder ein wenig besser:

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

Ich habe das versucht, aber meine 'mostDamaged' -Variable in der if-Anweisung wird zu einer doppelten lokalen Variable und wenn ich' mostDamaged' zurückgebe, wird null zurückgegeben. – BobSacamano

+1

@BobSacamano Bitte beachten Sie, dass Sie 'mostDamaged' in der if-Anweisung nicht erneut deklarieren müssen, sondern nur zuweisen. Siehe den Code in meiner Antwort. – Eran

+0

ohh ich sehe. Prost! – BobSacamano

1

Sie erklärt haben mostDamaged für Kontextvariable innen.

Erklären Sie es aus, und es gibt initialisieren:

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

Dies liegt daran, mostDamaged innerhalb der if Anweisung Ihres for Schleife definiert ist. Das heißt, wo Sie es zurückgeben wollen ist die Variable nicht definiert.

Sie können die Methode wie folgt umschreiben:

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; 
} 
Verwandte Themen