我有一个名为Spell的抽象类。 Spell类假设有几个子类,如DamageSpell,ChangeStatSpell等。
问题是技术性的 - 在DamageSpell类中 - 在声明损坏方法之后 - 它说它找不到getSpell(java无法找到符号:方法getSpell()。我该如何修复这个?我很感激一个代码示例,它描述了如何修复它。谢谢。
abstract public class Spell {
private String name;
private int spellLevel;
private int manaCost;
Spell(String name, int spellLevel , int manaCost){
this.name = name;
this.spellLevel = spellLevel;
this.manaCost = manaCost;
}
String getSpellName(){ return name; }
int getSpellLevel() {return spellLevel; }
int getManaCost(){ return manaCost; }
}
public class DamageSpell extends Spell {
private int n;
private int dice;
private int base;
private int stepLevel;
private int maxCasterLevel;
DamageSpell(String name, int spellLevel, int manaCost, int n, int dice, int base, int stepLevel, int maxCasterLevel){
super(name, spellLevel, manaCost);
this.n = n;
this.dice = dice;
this.base = base;
this.stepLevel = stepLevel;
this.maxCasterLevel = maxCasterLevel;
}
static List<DamageSpell> damageSpellsList = new ArrayList<DamageSpell>();
static
{
damageSpellsList.add(new DamageSpell("Magic Missiles", 1, 2, 1, 4, 1, 2, 9));
// damageSpellsList.add(new DamageSpell("Scorching Ray ", 2, 4));
damageSpellsList.add(new DamageSpell("Fireball", 3, 6, 1, 6, 1, 1, 10));
//damageSpellsList.add(new DamageSpell("Ice Storm", 4, 8));
}
public static void damage(String spellName, Character attacker, Character target){
DamageSpell spell = damageSpellsList.getSpell(spellName);
int damage = 0;
int casterLevel = Math.min(attacker.getLevel(), spell.maxCasterLevel);
int totalRolls = (casterLevel-spell.base)%spell.stepLevel;
for (int i = 1; i <= totalRolls ; i++) {
damage += DiceRoller.roll(spell.n, spell.dice);
}
target.setCurrentHp(target.getCurrentHp() - damage);
System.out.println(" You dealt " + damage + " to the enemy");
}
public DamageSpell getSpell(String spellName) {
try {
for (Iterator<DamageSpell> iter = damageSpellsList.iterator(); iter.hasNext(); ) {
DamageSpell spell = iter.next();
if (spellName.equals(spell.getSpellName())) {
return spell;
}
}
} catch (Exception e){
System.out.println(spellName + " haven't been found in spells-list");
return null;
}
return null;
}
}
答案 0 :(得分:0)
您在您的damageSpellsList变量上调用getSpell(...)
,该变量是一个ArrayList,当然不会有该方法。您需要在List中的元素上调用它,而不是在List本身上调用它。但话虽如此,我看到你的方法体仅使用静态元素,所以也许getSpell(...)
方法也应该是静态的并且在DamageSpell类上调用。我不确定我喜欢这个设计,也许List应该是非静态的并且保存在它自己的类中。
对于类似的问题,请始终发布您所看到的完整错误消息。
建议:
List<Spell>
HashMap<String, Spell>
,这样可以更容易地按名称检索该拼写。public Spell getSpell(String name)
方法cast(owner, target)
方法。答案 1 :(得分:0)
您的getSpell(&#34;&#34;)问题非常简单。您正在执行damageSpellsList.getSpell(spellName);
,damageSpellsList
是List<T>
,并且列表中没有getSpell()
方法(或任何常规集合)。
您需要做的是使用Object
访问列表存储在List<T>
的特定索引处的List#get(i)
,或完全迭代List
使用for循环或Iterator
。