当用户将实例名称输入为String时,调用Instance方法

时间:2013-07-02 09:11:36

标签: java arraylist instance

在我正在进行的一个小项目中,我遇到了困难。用户输入的命令可能是“xp Speed”,我的命令处理程序类发现它想要速度实例的XP值。在这种情况下,它需要将Skill.Speed.currentXP的值返回给用户。

该计划的一小部分:

//Example Instance initialization there is over 40 of these
Skill Speed = (new SkillSpeed(Skills.SKILL_SPEED,Skills.SKILL_SPEED_MODIFIER));

//Constructor for skill class
public Skill(String skillName, double modifier) {
    this.name  = skillName;
    this.minLevel = Skills.MIN_SKILL_LEVEL;
    this.Modifier = 1f;
    this.currentLevel = (int)calculateLevel();
    this.currentXP = 1;
    this.leaderboard = getCurrentLeaderboard();
    this.ID = getNextID();
}

现在,有一种方法可以做到这一点。通过一个switch语句,case case是输入的字符串。但是我确信在一个switch语句中有40多个case必须是可以避免的。我所拥有的另一个理论是创建一个包含所有当前实例的数组,然后遍历该列表,查找用户输入的字符串是否等于该实例的名称,然后返回实例本身。这就是我想出的:

//method inside another classs that attempts to return the appropriate skill Instance
public Skill getSkillFromName(String Name) {
    for(int i = 0; i < Skill.SkillArray.length; i++) {
        final String SkillName = Skill.SkillArray[i].getName();
        if(SkillName.equalsIgnoreCase(Name)) {
            return Skill.SkillArray[i];
        }
    }
    return null;
}

所以这就是我需要帮助的地方:

  • 创建所有已初始化实例的数组

  • 创建将返回Skill的方法。“InsertRandomInstanceDependingOnUserInputHere”.currentXP

  • 修复您在getSkillFromName()方法中看到的任何问题

或许我忽略了一种更简单的方法,你可以帮助我。

感谢您的帮助,

BigDaveNz

2 个答案:

答案 0 :(得分:0)

您可以使用Map。 E.g:

Map<String, Skill> skills = new HashMap<String, Skill>();

要插入值,请将值放入Map

skills.put(skill.getName(), skill);

要检索您的技能,您可以按名称获得技能:

Skill skill = skills.get(name);

答案 1 :(得分:0)

如果技能名称与方法名称完全匹配,您可以在“How do I invoke a Java method when given the method name as a string?”找到答案。

要按名称查找实例,您仍然可以使用Map