我实际上有两个关于如何正确执行此操作的问题。我是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();
}
答案 0 :(得分: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。
答案 1 :(得分:0)
是的,您对此的使用是正确的,但不是必需的。
'技能'是GLOBAL变量吗?如果是,则不需要在同一类的方法中传递它。特别是,
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'。
答案 2 :(得分:0)
代码没有提供足够的信息来确定您是否正确使用此功能。但一般情况下,attack
和attackLvl
是您班级中的字段,您正确使用它。例如:
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();
}
}
答案 3 :(得分:0)
<强>一强>
是的,您在这里正确使用this
关键字。在您的情况下(参数具有另一个名称作为成员变量)甚至不需要 - 但是每次调用类的成员变量时都建议使用this
。因此,请继续使用它,因为您已经在示例中使用它,以保持代码的可理解性和清洁性。
<强>两个强>
我想你打算做的是你的变量的某种动态命名,所以你最终会得到像
这样的东西this.attackSkill = xp;
this.attackSkillLvl = levelFromXP(this.attackSkill);
this.defenseSkill = xp;
this.defenseSkillLvl = levelFromXP(this.defenseSkill);
我是否正确解释了伪代码示例?
无论如何,您知道无法动态命名变量 - 仅当您使用Map
(例如HashMap
)时,您可以将值分配给密钥,因为你需要它们:
this.skillMap = new HashMap<String,Integer> ();
this.skillMap.put(skill, levelFromXP(skill);
然后您的skill
字符串将成为您可以访问该技能值的关键字:
this.skillMap.get("attackSkill") // returns the levelFromXP(attackSkillXP);
但这取决于你喜欢在课堂上拥有的其他“技能”值以及你使用的那些。如果您确定始终使用所有20多种不同技能,我建议您使用正常的List
或Array
。