问题描述
Player{FirstName='marco',LastName='Reus',Team='Dortmund',Country='Germany',fitness='Unfit',RecoveryTime='Slow'}
该程序的主要目的是考虑到球员的身体状况和恢复时间,并返回一套行动计划以帮助他们恢复健康。
我利用了枚举,并为每个枚举赋予了一个整数值aValue
。
public enum LevelOffitness {
/**
* Enum that represent the different level of fitness of each player
*/
CAREER_IN_DOUBT(8),INDEFINITELY_INJURED(7),INJURED(6),UNFIT(5),CLOSE_TO_fitness(4),NEAR_MATCH_FIT(3),MATCH_FIT(2),DATA_DEFICIENT(1),NOT_EVALUATED(0);
private int value;
LevelOffitness (int aValue) {
this.value = aValue;
}
public int getValue () {
return value;
}
}
我还有一套列举行动计划:
public enum ActionPlans{
GRADUAL_REHABILITATION,SURGERY,INTENSE_GYM_AND_THERAPY,NO_ACTION_NEEDED,REST_AND_REHABILITATION
}
在此示例中,我尝试以marco为例,如果玩家的Leveloffitness为5,这不适合并且恢复时间很慢,请返回逐步康复作为行动计划。
非常感谢
解决方法
我认为您需要给定玩家一个额外的方法LevelOfFitness.from(String)
和另一个getActionPlan
。
public LevelOfFitness from(String value){
// do some input checks
LevelOfFitness found = null;
for(LevelOfFitness level : LevelOfFitness.values()){
if(level.name().equalsIgnoreCase(value)){
return level;
}
}
throw new IllegalStateException("Not able to find fitness level for " + value);
}
public ActionPlans getActionPlan(Player player){
String fitness = player.getFitness();
LevelOfFitness levelOfFitness = LevelOfFitness.from(fitness);
ActionPlans actionPlan = null;
if(fitnessLevelOfFitness.getValue() == 5){
actionPlan = GRADUAL_REHABILITATION;
}
.....
return actionPlan;
}
您甚至可以将此类方法放在Player类本身中,在这种情况下,您可以进一步封装逻辑,而无需传递玩家引用。