我在我的第一个java程序上工作(所以这个问题相对简单)。我开发了一种基本的角色扮演游戏,我研究角色的属性。
我的问题是:
enum ClassStats {
Fighter(15,14,12,10,9,10), Rogue(12,12,16,14,10,10), Mage(10,10,14,16,14,10), Cleric(12,14,12,13,16,14);
private int strength, constitution, dexterity, intelligence, wisdom, charisma;
ClassStats(int str, int con, int dex, int intel, int wis, int cha){
strength = str;
constitution = con;
dexterity = dex;
intelligence = intel;
wisdom = wis;
charisma = cha;
}
int getStrength(){
return strength;
}
int getConstitution(){
return constitution;
}
int getDexterity(){
return dexterity;
}
int getIntelligence(){
return getIntelligence();
}
int getWisdom(){
return wisdom;
}
int getCharisma(){
return charisma;
}
}
public class Character {
private String Name;
private String Class;
private int Level;
private long XP;
private int HP;
private int currentHp;
/*private int BAB; /*Base attack bonus*/
private int Strength;
private int Constitution;
private int Dexterity;
private int Intelligence;
private int Wisdom;
private int Charisma;
Character(String name, String chracterClass){
Name = name;
Class = chracterClass;
Level = 1;
XP = 0;
HP = CharacterUtil.setHP(chracterClass);
currentHp = HP;
ClassStats cs = null;
Strength = cs.getStrength();
System.out.println("Strength: " + Strength);
Constitution = cs.getConstitution();
Dexterity = cs.getDexterity();
Intelligence = cs.getIntelligence();
Wisdom = cs.getWisdom();
Charisma = cs.getCharisma();
}
}
答案 0 :(得分:1)
A)你可以将枚举传递给构造函数。
B)或者,您可以通过enumClass.valueOf(strValue)
从字符串值中获取枚举。
C)或者,更好的是,您可以拥有一个工厂类来为您生成不同的默认字符。
此外,这两行没有意义:
ClassStats cs = null;
Strength = cs.getStrength();
如果将其设置为null,则无法在对象上调用方法。这基本上是你可以从构造函数中传递的字符串表示解析枚举的,或者如果你选择选项2,你就已经有了一个ClassStats变量。
答案 1 :(得分:0)
起初:
ClassStats cs = null;
Strength = cs.getStrength();
System.out.println("Strength: " + Strength);
Constitution = cs.getConstitution();
Dexterity = cs.getDexterity();
Intelligence = cs.getIntelligence();
Wisdom = cs.getWisdom();
Charisma = cs.getCharisma();
这不行。在第一行中,您将cs设置为" null"而且你试图通过一些吸气剂访问cs的数据。你应该如何从" null"?
获得一个值在java中访问枚举值就像
一样YourEnum.values()[index];
在How to get Enum Value from index in Java?
中或
YourEnum.YourValue
在Java: access to the constants in an enumeration (enum)
中此外,我会考虑使用像MySQL这样的数据库系统来存储字符类信息 - 如果你的项目变大,这就更容易编辑。这里使用最多的是Java Persistance API(JPA)。
答案 2 :(得分:0)
我建议不要使用枚举,并使用较少的原始值并为这些需求创建对象。每个玩家类也可以是一个Java类(所有类都扩展了一个抽象的PlayerClass) 然后Character可以在构造函数中接收一个player类,并询问它默认属性是什么。
在这个程序变大之后,我会研究工厂设计模式。