私が取り組んでいる小さなプロジェクトで、行き詰まってしまいました。ユーザーが「xp Speed」である可能性のあるコマンドを入力すると、私のコマンド ハンドラー クラスは、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();
}
今、私がこれを行うことができる1つの方法があります。case 値が入力された文字列である switch ステートメントを使用します。ただし、1 つの 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