0

私が取り組んでいる小さなプロジェクトで、行き詰まってしまいました。ユーザーが「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

4

2 に答える 2

0

スキルの名前がメソッド名と正確に一致する場合、「メソッド名が文字列として与えられたときに Java メソッドを呼び出すにはどうすればよいですか?」に答えがあるかもしれません。

名前でインスタンスを検索するには、引き続き を使用できますMap

于 2013-07-02T09:22:55.333 に答える
0

これには aMapを使用できます。例えば:

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

値を挿入するには、値を に入れますMap:

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

スキルを取得するには、名前でスキルを取得できます。

Skill skill = skills.get(name);
于 2013-07-02T09:17:14.177 に答える