0

我实际上有两个关于如何正确执行此操作的问题。我对 Java 编程相当陌生,这使得我想做的事情很难自己完成,而且不问任何问题。

我的第一个问题,我在这里正确使用“这个”这个词吗?我有一个带有一堆不同元素的构造函数,其中两个元素是“attack”和“attackLvl”。此方法会正确更新元素吗?

public void updateAttack(int xp){
    this.attack = xp;
    this.attackLvl = levelFromXP(this.attack);
    updateOverall();
}

其次,更多的是关于如何达到某种结果的广泛问题。我可以像上面那样制作 20 多种不同的方法,但我宁愿将参数传递给如下示例的语句,但我不知道该怎么做:

public void updateAttack(int xp, String skill){
    this.(skill) = xp;
    this.(skill + "Lvl") = levelFromXP(this.skill);
    updateOverall();
}
4

4 回答 4

1

如果您想要多种技能,请按名称:

protected Map<String,Integer> skillLevelMap = new TreeMap();

public int getSkillLevel (String skill) {
    Integer level = skillLevelMap.get( skill);
    return (level != null) ?  level : 0;
}
public void setSkillLevel (String skill, int level) {
    skillLevelMap.put( skill, level);
}

这避免了必须为不同类型的技能编写 5-20 个不同的 getter/setter。

于 2013-05-08T01:04:51.663 回答
0

是的,您在this这里正确使用了关键字。在您的情况下(参数有另一个名称作为成员变量)甚至没有必要 - 但建议this每次调用类的成员变量时使用。因此,请继续使用它,就像您在示例中已经使用的那样,以保持您的代码易于理解和干净。

我想你打算做的是对变量进行某种动态命名,所以你最终会得到类似的东西

this.attackSkill = xp;
this.attackSkillLvl = levelFromXP(this.attackSkill);
this.defenseSkill = xp;
this.defenseSkillLvl =  levelFromXP(this.defenseSkill);

我是否正确解释了您的伪代码示例?

无论如何,正如您所知,动态命名变量是不可能的——只有当您使用 a Map(例如 a HashMap)时,您可以根据需要将值分配给

this.skillMap = new HashMap<String,Integer> ();
this.skillMap.put(skill, levelFromXP(skill);

然后,您的skillString 将是您可以访问技能值的键:

this.skillMap.get("attackSkill") // returns the levelFromXP(attackSkillXP);

但这取决于您喜欢在课堂上拥有哪些其他“技能”价值观以及您使用哪一个。如果您确定要始终使用所有 20 多种不同的技能,我建议您使用普通ListArray.

于 2013-05-08T01:05:42.713 回答
0
  1. 是的,您对此的使用是正确的,但不是必需的。

  2. “技能”是全局变量吗?如果是,则无需再在同一个类的方法中传递它。尤其是,

    public void updateAttack(int xp){
      skill = xp; //but compiler error since xp is an int and skill is a String
      skill = "Lvl1" + levelFromXP(skill);
      updateOverall();
    }
    

只有在命名有歧义时才需要“this” 。

于 2013-05-08T00:55:52.583 回答
0

该代码没有提供足够的信息来确定您是否正确使用它。但总的来说,如果attackattackLvl是您班级中的字段,您正在正确使用它。例如:

public class Player(){
    String attackLvl;
    int attack;

    public void updateAttack(int xp){
       this.attack = xp; //reference fields on this class is proper use
       this.attackLvl = levelFromXP(this.attack);
       updateOverall();
    }
}
于 2013-05-08T00:56:55.220 回答