Java静态/非静态方法

Java静态/非静态方法,java,methods,Java,Methods,我开始着手我的第一个java项目,这是一个基本的RPG,我有一个关于咒语的问题。我有一个名为Character的抽象类,它由一些子类(如Fighter,Mage等)扩展。只有施法者才能施法。关于法术-我有一个名为Spell的类来描述一个法术(它的名称、效果、法力等等)。所有法术都存储在法术列表类中,该类具有法术列表列表(类法术的对象)。我有一个效果类(很有可能它会成为一个界面),它有一些效果,比如“伤害”和“治疗”,但我暂时不使用它,我只想测试一下我的效果 我的问题是,Mage的方法addToS

我开始着手我的第一个java项目,这是一个基本的RPG,我有一个关于咒语的问题。我有一个名为
Character
的抽象类,它由一些子类(如
Fighter
Mage
等)扩展。只有施法者才能施法。关于法术-我有一个名为
Spell
的类来描述一个法术(它的名称、效果、法力等等)。所有法术都存储在
法术列表
类中,该类具有
法术列表
列表(类
法术
的对象)。我有一个
效果
类(很有可能它会成为一个界面),它有一些效果,比如“伤害”和“治疗”,但我暂时不使用它,我只想测试一下我的效果

我的问题是,
Mage
的方法
addToSpellBook
showSpellBook
给出了一个编译器错误:
java找不到symbol:method addtoseplbook,location:variable hero of type Game.Character
。同样适用于
showSpellBook
。为什么以及如何修复它? (问题可能出在
法师
/
法术
/
法术列表
类中,而不是
字符
长,因此不那么可怕:)

公共类游戏{
公共静态void main(字符串[]args)引发IOException{
CharacterCreator heroCreator=新的CharacterCreator();
CharacterCreator.showAllClasses();
扫描仪sc=新的扫描仪(System.in);
int scan=sc.nextInt();
字符串chosenClass=CharacterCreator.getCharacterClass(扫描);
角色英雄=CharacterCreator.createCharacter(chosenClass);
试一试{
hero.displayCharacter();
}捕获(例外e){
System.out.println(“错误输入”);
}
if(hero.getCharacterClass().equals(“Mage”)){
英雄。AddToSpillbook(“火球”);
英雄。showSpellBook();
}
}
}
公共类角色创建者{
公共静态字符createCharacter(字符串chosenClass){
角色英雄=空;
System.out.println(“选择名称:”);
扫描仪名称in=新扫描仪(System.in);
String name=nameIn.next();
开关(chosenClass){
案例“战斗机”:
返回新战斗机(名称);
“流氓”案:
返回新盗贼(姓名);
案例“法师”:
返回新法师(姓名);
“神职人员”一案:
返回新牧师(姓名);
案例“def”:
System.out.println(“错误输入”);
返回null;
违约:
返回null;
}
}
公共静态void showAllClasses(){
System.out.println(“选择一个字符:”);
System.out.println(“1.Fighter”);
System.out.println(“2.Rogue”);
System.out.println(“3.Mage”);
System.out.println(“4.Cleric”);
}
公共静态字符串getCharacterClass(整型扫描){
字符串分类;
开关(扫描){
案例1:
classIn=“战斗机”;
打破
案例2:
classIn=“流氓”;
打破
案例3:
classIn=“法师”;
打破
案例4:
classIn=“牧师”;
打破
违约:
System.out.println(“再次输入”);
classIn=“def”;
}
返回类;
}
}
抽象公共类特征{
私有字符串名称;
私有字符串字符类;
私有整数级;
私人int hp;
私营企业;
私家军械库;
私有长xp;
/*私人智力BAB;/*基础攻击加成*/
私人综合实力;
私人宪法;
私人智能;
私人情报;
私人智慧;
个人魅力;
受保护字符(字符串名称){
集合名(名称);
setCharacterClass(“类”);
设定水平(1);
强度(10);
宪法(10);
坐位灵活性(10);
setIntelligence(10);
智慧(10);
人格魅力(10);
setHp(0);
setCurrentHp(getHp());
setArmorClass(10);
setXp(0);
}
void displayCharacter()引发IOException{
系统输出打印(“\n\n\n”);
System.out.println(“Name:+getName());
System.out.println(“类:+getCharacterClass());
System.out.println(“级别:+getLevel());
System.out.println(“HP:+getHp());
System.out.println(“当前HP:+getCurrentHp());
System.out.println(“装甲等级:+getArmorClass());
System.out.println(“*******************”);
System.out.println(“属性:”);
System.out.println(“强度:+getStrength());
System.out.println(“构成:+getConstitution());
System.out.println(“灵巧:+getdextrity());
System.out.println(“Intelligence:+getIntelligence());
System.out.println(“智慧:+getWisset());
System.out.println(“Charisma:+getCharisma());
System.out.println(“*******************”);
System.out.println(“XP:+getXp());
}
公共整数getModifier(整数编号){
整数模=(整数)((数字-10)/2);
返回模式;
}
公共字符串getName(){return name;}
公共字符串getCharacterClass(){return characterClass;}
public int getLevel(){return level;}
public int getHp(){return hp;}
public int getCurrentHp(){return currentHp;}
public int getArmorClass(){return armorClass;}
public int getStrength(){return strength;}
public int getConstruction(){返回Construction;}
public int getDexterty(){return dexterty;}
public int getIntelligence(){return intelligence;}
public int getWisset(){return wisset;}
public int getCharisma(){return charisma;}
公共长getXp(){return xp;}
受保护的无效集合名(字符串名){Name=Name;}
受保护的无效setCharacterClass(String characterClass){this.characterClass
public class Game {
public static void main(String[] args) throws IOException {

    CharacterCreator heroCreator = new CharacterCreator();
    CharacterCreator.showAllClasses();

    Scanner sc = new Scanner(System.in);
    int scan = sc.nextInt();
    String chosenClass = CharacterCreator.getCharacterClass(scan);
    Character hero = CharacterCreator.createCharacter(chosenClass);
    try {
        hero.displayCharacter();
    }catch (Exception e){
        System.out.println("Wrong input");
    }




    if (hero.getCharacterClass().equals("Mage")){
        hero.addToSpellBook("Fireball");
        hero.showSpellBook();
    }



}

   }

public class CharacterCreator {

public static Character createCharacter(String chosenClass) {

    Character hero = null;

    System.out.println("Choose Name:");
    Scanner nameIn = new Scanner(System.in);
    String name = nameIn.next();


        switch (chosenClass) {
            case "Fighter":
                return new Fighter(name);
            case "Rogue":
                return new Rogue(name);
            case "Mage":
                return new Mage(name);
            case "Cleric":
                return new Cleric(name);
            case "def":
                System.out.println("Wrong input");
                return null;
            default:
                return null;
        }


}

public static void  showAllClasses(){
    System.out.println("Choose a character: ");
    System.out.println("1. Fighter");
    System.out.println("2. Rogue");
    System.out.println("3. Mage");
    System.out.println("4. Cleric");
}


public static String getCharacterClass(int scan){

    String classIn;

    switch (scan) {
        case 1:
            classIn = "Fighter";
            break;
        case 2:
            classIn = "Rogue";
            break;
        case 3:
            classIn = "Mage";
            break;
        case 4:
            classIn = "Cleric";
            break;
        default:
            System.out.println("Enter again");
            classIn = "def";
    }

    return classIn;
}

}


abstract public class Character {

    private String name;
    private String characterClass;
    private int level;
    private int hp;
    private int currentHp;
    private int armorClass;

    private long xp;
    /*private int BAB; /*Base attack bonus*/

    private int strength;
    private int constitution;
    private int dexterity;
    private int intelligence;
    private int wisdom;
    private int charisma;


    protected Character(String name){

        setName(name);
        setCharacterClass("Class");
        setLevel(1);
        setStrength(10);
        setConstitution(10);
        setDexterity(10);
        setIntelligence(10);
        setWisdom(10);
        setCharisma(10);
        setHp(0);
        setCurrentHp(getHp());
        setArmorClass(10);
        setXp(0);

    }


    void displayCharacter() throws IOException{
        System.out.print("\n\n\n");
        System.out.println("Name: " + getName());
        System.out.println("Class: " + getCharacterClass());
        System.out.println("Level: " + getLevel());
        System.out.println("HP: " + getHp());
        System.out.println("Current HP: " + getCurrentHp());
        System.out.println("Armor Class: " + getArmorClass());

        System.out.println("***************");
        System.out.println("Attributes: ");
        System.out.println("Strength: " + getStrength());
        System.out.println("Constitution: " + getConstitution());
        System.out.println("Dexterity: " + getDexterity());
        System.out.println("Intelligence: " + getIntelligence());
        System.out.println("Wisdom: " + getWisdom());
        System.out.println("Charisma: " + getCharisma());
        System.out.println("***************");
        System.out.println("XP: " + getXp());

    }

    public int getModifier(int number){
        int mod = (int)((number -10)/2);
        return mod;
    }

    public String getName() { return name; }
    public String getCharacterClass() { return characterClass; }
    public int getLevel() { return level; }
    public int getHp() { return  hp; }
    public int getCurrentHp() { return  currentHp; }
    public int getArmorClass() { return  armorClass; }
    public int getStrength(){ return strength; }
    public int getConstitution(){ return constitution; }
    public int getDexterity(){ return dexterity; }
    public int getIntelligence(){ return intelligence; }
    public int getWisdom(){ return wisdom; }
    public int getCharisma(){ return charisma;}
    public long getXp(){ return xp;}


    protected void setName(String Name) { name = Name; }
    protected void setCharacterClass(String characterClass) { this.characterClass = characterClass; }
    protected void setLevel(int lvl){ level = lvl; }
    protected void setHp(int hitPoints){ hp = hitPoints; }
    protected void setCurrentHp(int curHp){ currentHp = curHp; }
    protected void setArmorClass(int ac){ armorClass = ac; }
    protected void setStrength(int str){ strength = str; }
    protected void setConstitution(int con){ constitution = con; }
    protected void setDexterity( int dex) { dexterity = dex; }
    protected void setIntelligence(int intel){ intelligence = intel; }
    protected void setWisdom(int wis){ wisdom = wis; }
    protected void setCharisma(int cha){charisma = cha; }
    protected void setXp(int XP){xp = XP; }

    }

public class Mage extends Character  {

private List<Spell> spellBook;

public Mage(String name){

    super(name);

    setName(name);
    setCharacterClass("Mage");
    setLevel(1);
    setStrength(10);
    setConstitution(10);
    setDexterity(14);
    setIntelligence(16);
    setWisdom(14);
    setCharisma(10);
    setHp((int) (4 + getModifier(getConstitution())));
    setCurrentHp(getHp());
    setArmorClass(10 + getModifier(getDexterity()));
    spellBook = null;

}

 void addToSpellBook(String spellName){

    Spell newSpell;
    newSpell = SpellsList.getSpell(spellName);
    spellBook.add(newSpell);

}

void showSpellBook(){

    for (Iterator<Spell> iter = spellBook.iterator(); iter.hasNext(); ) {
        Spell spell = iter.next();
        if (spellBook.equals(spell.getSpellName())) {
            System.out.println("Spell name: " + spell.getSpellName());
            System.out.println("Spell effect: " + spell.getEffect());
        }
        }
}

}



public class Spell {
private String name;
private int spellLevel;
private String effect;
private int manaCost;
private int duration;

Spell(String name, int spellLevel, String effect, int manaCost, int duration){
    this.name = name;
    this.spellLevel = spellLevel;
    this.effect = effect;
    this.manaCost = manaCost;
    this.duration= duration;
}


void castSpell(String spellName, Character hero, Character target){
    try {
        Spell spell = SpellsList.getSpell(spellName);
        System.out.println("You casted: " + spellName);
        System.out.println("Spell effect: " + spell.effect);
    }
    catch (Exception e){
        System.out.println("No such spell");
    }
}

String getSpellName(){ return name; }

int getSpellLevel() {return spellLevel; }

String getEffect(){ return effect; }

int getManaCost(){
    return manaCost;
}

int getDuration() { return  duration; }
}


public class SpellsList {
static List<Spell> spellsList = new ArrayList<Spell>();
static

{
    spellsList.add(new Spell("Fireball", 3, "damage", 5,0 ));
    spellsList.add(new Spell("Ice Storm", 4, "damage", 8, 0));
    spellsList.add(new Spell("Heal", 2, "heal", 4, 0));
}

static Spell getSpell(String spellName) {
    try {
        for (Iterator<Spell> iter = spellsList.iterator(); iter.hasNext(); ) {
            Spell 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;

}

}
if(hero instanceof Mage)
   ((Mage) hero).addToSpellBook();
if(hero instanceof Mage) {
   ((Mage)hero).addToSpellBook("Fireball");
   ((Mage)hero).showSpellBook();
}