Java从枚举中检索数据

时间:2015-10-23 12:12:57

标签: java enums

我在我的第一个java程序上工作(所以这个问题相对简单)。我开发了一种基本的角色扮演游戏,我研究角色的属性。

我的问题是:

  1. 如何从我创建的枚举中检索数据(问题出在Character构造函数中。我需要根据所选的字符类从ClassStats中获取值)?
  2. 我可以更好地存储每个角色类的属性的初始值吗?
  3. 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();
    
    }
    
    }
    

3 个答案:

答案 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)。

https://dzone.com/articles/jpa-tutorial-setting-jpa-java

答案 2 :(得分:0)

我建议不要使用枚举,并使用较少的原始值并为这些需求创建对象。每个玩家类也可以是一个Java类(所有类都扩展了一个抽象的PlayerClass) 然后Character可以在构造函数中接收一个player类,并询问它默认属性是什么。

在这个程序变大之后,我会研究工厂设计模式。