簡體   English   中英

Java從枚舉中檢索數據

[英]Java retrieving data from enums

我在第一個Java程序上工作(所以這個問題相對簡單)。 我開發了一種基本的角色扮演游戲,致力於角色的屬性。

我的問題是:

  1. 如何從創建的枚舉中檢索數據(問題出在Character構造函數中。我需要根據所選的字符類從ClassStats獲取值)?
  2. 我可以更好的方式存儲每個字符類的屬性的初始值嗎?
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];

如何從Java中的索引獲取枚舉值?

要么

YourEnum.YourValue

Java中一樣:訪問枚舉中的常量(枚舉)

另外,我會考慮使用像MySQL這樣的數據庫系統來存儲Character-Class信息-如果您的項目變大,則更容易編輯。 這里使用最多的是Java Persistance API(JPA)。

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

我建議不要使用枚舉,而應使用較少的原始值並為這些需求創建對象。 每個玩家類也可以是Java類(它們都擴展了一個抽象的PlayerClass),然后Character可以在構造函數中接收一個玩家類,並詢問其默認屬性是什么。

該程序變大后,我將研究Factory設計模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM