私がやろうとしているのは、ハザードクラスの影響値を合計することです
たとえば、居住者のリストを調べ、危険を見つけ、そこから影響量を取得します。次に、すべての危険の合計の影響を合計し、その値を私に返します。
以下に、Caveクラス、Hazardクラス、AbstractOccupantクラスがあります。
洞窟にハザードを追加すると、HashSetの占有者になります。getImpact()メソッドを使用してエネルギーレベルを取得しようとすると、ハザードにあり、占有者ではないため、メソッドにアクセスできません。
Occupantを拡張するクラスが他に2つあります。プレーヤーとアイテム。
getImpact()メソッドを使用できるように、HashSetに追加するときに、ハザードをハザードクラスとして保持する方法が見つかりません。
これは、HashSetに追加するときに、他のクラスのPlayerとItemにも対応する必要があります。
public class Cave {
HashSet<Occupant> occupants;
private double impact;
/**
* Creat a new Cave instance with no occupants.
*/
public Cave()
{
occupants = new HashSet<Occupant>();
}
/**
* Adds an occupant to a Cave if the occupant is not already there and
* if cave currently has fewer than the maximum number of occupants.
* @param occupant, the occupant to add
* @return true if successfully added
*/
public boolean addOccupant(Occupant occupant) {
boolean validNewOccupant = occupant != null;
boolean enoughRoom = occupants.size() < MAX_OCCUPANTS;
if (validNewOccupant && enoughRoom) {
validNewOccupant = occupants.add(occupant);
}
return validNewOccupant && enoughRoom;
}
/**
* Gets the sum of the impact from all hazards in the cave
* @returns hazardEnergyImpact
*/
public double getHazardEnergyImpacts(){
double energyImpact = 0.0;
for( Occupant occupant : occupants ){
if(occupant.toString() == "!"){
energyImpact += occupant.getImpact();
}
}
return energyImpact;
}
}
public abstract class Occupant {
private Address address;
private String name;
/**
* Construct an occupant for a known address & name.
* @ param row, row of address
* @ param column, row of address.
* @ param name, occupant's name
*/
public Occupant(Address address, String name) {
this.address = address;
this.name = name;
}
@Override
public String toString(){
return "";
}
}
public class Hazard extends Occupant {
private String longDescription;
private double impact;
/**
* Construct a hazard with know attributes
* @param row
* @param column
* @param name
* @param longDescription
* @param impact
*/
public Hazard(Address address, String name, String longDescription, double impact) {
super(address, name);
this.longDescription = longDescription;
this.impact = impact;
}
@Override
public String toString(){
return "!";
}
/**
* gets impact amount
* @returns impact
*/
public double getImpact(){
return this.impact;
}
}