在我正在进行的一个小项目中,我陷入了困境。用户输入一个可能是“xp Speed”的命令,我的命令处理程序类发现它想要Speed Instance的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();
}
现在,我有一种方法可以做到这一点。通过使用带有 case 值的 switch 语句作为输入的字符串。但是,我确信在一个 switch 语句中有 40 多个案例是可以避免的。我的另一个理论是创建一个包含所有当前实例的数组,然后遍历该列表,查找用户输入的字符串是否等于该实例的名称,然后返回该实例本身。这就是我想出的:
//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