2016-06-24 7 views
-4

Für meine Aufgabe Frage ist es eine Methode mit der Signatur public int applyNutrientCoefficient(), die berechnet, welche Guppies in der an Unterernährung gestorben sind, und gibt die Anzahl der Todesfälle.Boolesche Probleme aus verschiedenen Klassen

Verwenden Sie eine Iterator<Guppy>, um über die guppiesInPool in Pool zu iterieren. Erstellen Sie für jede Guppy eine andere Zufallszahl zwischen 0.0 und 1.0 einschließlich unter Verwendung der Random Methode nextDouble(). Wenn diese zufällig generierte Zahl größer als der Nährstoffkoeffizient des Pools ist, löschen Sie Guppy , indem Sie das entsprechende boolesche Feld in Guppy setzen. Beachten Sie, dass diese Methode keine toten Guppies aus dem Pool entfernt, sie tötet nur sie. Mach nichts anderes.

Ich habe 2 Klassen ist Guppy ist Pool in meiner Guppy Klasse I einen boolean gemacht -

private boolean isAlive{} 
public boolean getIsAlive(){ 
    return isAlive 
} 

in meinem Pool Klasse ....

public int applyNutrientCoefficient() 

int deathCount = 0 

Iterator<Guppy> it = guppiesInPool.iterator() 

while (it.hasNext()) 

Guppy guppyOne = it.next() 

    if (randomNumberGenerator.nextDouble() > nutrientCoefficient) 
    if (guppyOne.isAlive()) 
    guppyOne.setAlive(false) 
    deathCount++ 

    return deathCount 

Die Fehlermeldung I Ich bekomme ist nicht finden kann Symbol - Methode isAlive()

Kann jemand bitte helfen

+1

Was für ein Durcheinander, das ist kein gültiger Java-Code. Sie fehlen Semikolons und Klammern. – tak3shi

Antwort

0

müssen Sie IsAlive privaten Bereich über das öffentliche Getter acces, die Sie getIsAlive versehen()

In der Pool-Klasse

if (randomNumberGenerator.nextDouble() > nutrientCoefficient) 
if (guppyOne.isAlive()) 
guppyOne.setAlive(false) 
deathCount++ 

return deathCount 

die Linie

if (guppyOne.isAlive()) 

statt

sollte
if (guppyOne.getIsAlive()) 

gleiche th ing mit dem Setzer: Sie einen Setter auf die Guppy-Klasse zur Verfügung stellen müssen und verwenden, die

public void setIsAlive(boolean alive){ 
this.isAlive = alive} 

Endergebnis

if (randomNumberGenerator.nextDouble() > nutrientCoefficient) 
if (guppyOne.getIsAlive()) 
guppyOne.setIsAlive(false) 
deathCount++ 

return deathCount 
+0

Ich tat, dass ich getIsAlive() setzen, aber aus irgendeinem Grund gab mir immer noch denselben Fehler. wie würde ich das private isAlive öffentlich machen? ich habe public boolean getIsAlive() { return isAlive; – nikki

+0

Sie müssen ** ** auch ** 'getIsAlive()' aufrufen, um öffentlich auf den aktuellen Wert des privaten 'isAlive'-Feldes zuzugreifen. BTW: Selbst wenn es öffentlich wäre, würde 'isAlive() 'nicht kompilieren, weil es keine Methode, sondern ein Feld ist. – Fildor

+0

das Problem ist, dass Sie versuchen, in Pool-Klasse die IsAlive direkt zugreifen, wenn (GuppyOne.isAlive()) , wenn Sie den Getter if (GuppyOne.getIsAlive()) – Zeromus

0

Ihre Syntax scheint irgendwie weg sein sollte. Es sollte

private boolean isAlive; //private field, not a method. 
public boolean getIsAlive() { //public getter method. 
    return isAlive; 
} 
public void setIsAlive(boolean isAlive) { //public setter method 
    this.isAlive = isAlive; 
} 

Dann sein,

public int applyNutrientCoefficient() { 
    int deathCount = 0; 
    Iterator it = guppiesInPool.iterator(); 
    while (it.hasNext()) { 
     Guppy guppyOne = it.next(); 
     if (randomNumberGenerator.nextDouble() > nutrientCoefficient) { 
      if (guppyOne.getIsAlive()) { 
       guppyOne.setIsAlive(false); 
       deathCount++; // should be inside the if-block i suppose? 
      } 
     } 
    } 

    return deathCount; 
} 

Auch stellen Sie sicher, Semikolons und geschweifte Klammern verwenden, oder der Compiler Sie Fehler geben.