[英]Java retrieving data from enums
我在第一個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();
}
}
A)您可以將枚舉傳遞到構造函數中。
B)或者,您可以通過enumClass.valueOf(strValue)
從字符串值中獲取一個枚舉。
C)或者,更好的是,您可以擁有一個工廠類來為您生成不同的默認字符。
此外,這兩行沒有意義:
ClassStats cs = null;
Strength = cs.getStrength();
如果將其設置為null,則無法在對象上調用方法。 從本質上講,這是您可以從構造函數中傳遞的字符串表示形式解析枚舉的位置,或者,如果您選擇選項2,則已經有一個ClassStats變量。
首先:
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”,然后嘗試通過一些getter訪問cs的數據。 您應該如何從“ null”中獲取一個值?
在Java中訪問枚舉值的工作方式類似於
YourEnum.values()[index];
要么
YourEnum.YourValue
另外,我會考慮使用像MySQL這樣的數據庫系統來存儲Character-Class信息-如果您的項目變大,則更容易編輯。 這里使用最多的是Java Persistance API(JPA)。
我建議不要使用枚舉,而應使用較少的原始值並為這些需求創建對象。 每個玩家類也可以是Java類(它們都擴展了一個抽象的PlayerClass),然后Character可以在構造函數中接收一個玩家類,並詢問其默認屬性是什么。
該程序變大后,我將研究Factory設計模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.