2015-07-10 76 views
0

我有一个枚举,我想从中获得一些信息。 这是枚举:从枚举中获得一定金额

public static enum Prayer { 
     THICK_SKIN(new double[] {21233, 1, 83, 12}, DEFENCE_PRAYER, false), 
     BURST_OF_STRENGTH(new double[] {21234, 4, 84, 12}, STRENGTH_PRAYER, false), 
     CLARITY_OF_THOUGHT(new double[] {21235, 7, 85, 12}, ATTACK_PRAYER, false), 
     ROCK_SKIN(new double[] {21236, 10, 86, 6}, DEFENCE_PRAYER, false), 
     SUPERHUMAN_STRENGTH(new double[] {21237, 13, 87, 6}, STRENGTH_PRAYER, false), 
     IMPROVED_REFLEXES(new double[] {21238, 16, 88, 6}, ATTACK_PRAYER, false), 
     RAPID_RESTORE(new double[] {21239, 19, 89, 26}, -1, false), 
     RAPID_HEAL(new double[] {21240, 22, 90, 18}, -1, false), 
     PROTECT_ITEM(new double[] {25020, 25, 91, 18}, -1, false), 
     STEEL_SKIN(new double[] {21242, 28, 92, 3}, DEFENCE_PRAYER, false), 
     ULTIMATE_STRENGTH(new double[] {21243, 31, 93, 3}, STRENGTH_PRAYER, false), 
     INCREDIBLE_REFLEXES(new double[] {21244, 34, 94, 3}, ATTACK_PRAYER, false), 
     PROTECT_FROM_MAGIC(new double[] {21245, 37, 95, 3, 2}, OVERHEAD_PRAYER, false), 
     PROTECT_FROM_MISSILES(new double[] {21246, 40, 96, 3, 1}, OVERHEAD_PRAYER, false), 
     PROTECT_FROM_MELEE(new double[] {21247, 43, 97, 3, 0}, OVERHEAD_PRAYER, false), 
     RETRIBUTION(new double[] {2171, 46, 98, 1, 3}, OVERHEAD_PRAYER, false), 
     REDEMPTION(new double[] {2172, 49, 99, 2, 5}, OVERHEAD_PRAYER, false), 
     SMITE(new double[] {2173, 52, 100, 2, 4}, OVERHEAD_PRAYER, false), 
     SHARP_EYE(new double[] {70080, 8, 601, 12}, RANGE_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     MYSTIC_WILL(new double[] {70082, 9, 602, 12}, MAGIC_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     HAWK_EYE(new double[] {70084, 26, 603, 6}, RANGE_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     MYSTIC_LORE(new double[] {70086, 27, 604, 6}, MAGIC_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     EAGLE_EYE(new double[] {70088, 44, 605, 3}, RANGE_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     MYSTIC_MIGHT(new double[] {70090, 45, 606, 3}, MAGIC_PRAYER | ATTACK_PRAYER | STRENGTH_PRAYER, false), 
     CHIVALRY(new double[] {70092, 60, 607, 1.5}, ATTACK_PRAYER | STRENGTH_PRAYER | DEFENCE_PRAYER, false), 
     PIETY(new double[] {70094, 70, 608, 1.5}, ATTACK_PRAYER | STRENGTH_PRAYER | DEFENCE_PRAYER, false), 
     PROTECT_ITEM_(new double[] {87231, 50, 83, 18, 12567, 2213}, -1, true), 
     SAP_WARRIOR(new double[] {87233, 50, 84, 2.57}, SAP_PRAYER, true), 
     SAP_RANGER(new double[] {87235, 52, 85, 2.57}, SAP_PRAYER, true), 
     SAP_MAGE(new double[] {87237, 54, 101, 2.57}, SAP_PRAYER, true), 
     SAP_SPIRIT(new double[] {87239, 56, 102, 2.57}, SAP_PRAYER, true), 
     BERSERKER(new double[] {87241, 59, 86, 18, 12589, 2266}, -1, true), 
     DEFLECT_SUMMON(new double[] {87243, 62, 87, 3}, OVERHEAD_PRAYER, true), 
     DEFLECT_MAGIC(new double[] {87245, 65, 88, 3, 10}, OVERHEAD_PRAYER, true), 
     DEFLECT_RANGE(new double[] {87247, 68, 89, 3, 11}, OVERHEAD_PRAYER, true), 
     DEFLECT_MELEE(new double[] {87249, 71, 90, 3, 9}, OVERHEAD_PRAYER, true), 
     LEECH_ATTACK(new double[] {87251, 74, 91, 3}, LEECH_PRAYER, true), 
     LEECH_RANGE(new double[] {87253, 76, 103, 3}, LEECH_PRAYER, true), 
     LEECH_MAGE(new double[] {87255, 78, 104, 3}, LEECH_PRAYER, true), 
     LEECH_DEFENCE(new double[] {88001, 80, 92, 3}, LEECH_PRAYER, true), 
     LEECH_STRENGTH(new double[] {88003, 82, 93, 3}, LEECH_PRAYER, true), 
     LEECH_ENERGY(new double[] {88005, 84, 94, 3.6}, LEECH_PRAYER, true), 
     LEECH_SPECIAL(new double[] {88007, 86, 95, 3}, LEECH_PRAYER, true), 
     WRATH(new double[] {88009, 89, 96, 12, 16}, OVERHEAD_PRAYER, true), 
     SOUL_SPLIT(new double[] {88011, 92, 97, 2, 17}, OVERHEAD_PRAYER, true), 
     TURMOIL(new double[] {88013, 95, 105, 2, 12565, 2226}, SAP_PRAYER | LEECH_PRAYER, true); 

下面是一些代码来了解一切意味着:

private Prayer(double[] data, int prayerMask, boolean curse) { 
      this.id = (int) data[0]; 
      this.level = (int) data[1]; 
      this.config = (int) data[2]; 
      this.drain = data[3] * 2; 
      this.icon = (int) (data.length == 5 ? data[4] : -1); 
      this.anim = data.length == 6 ? (int) data[4] : -1; 
      this.graphic = data.length == 6 ? (int) data[5] : -1; 
      this.name = Misc.formatPlayerName(this.toString()); 
      this.prayMask = prayerMask; 
      this.curse = curse; 
     } 
... 
public double getDrain() { 
      return drain; 
     } 

我不想每次都获得第四个数字。它必须是在这样的形式,但是这并不工作:

public void handlePrayerDrain() { 
     double toRemove = 0.0; 
     for (int j = 0; j < prayerData.length; j++) { 
      if (c.prayerActive[j]) { 
       toRemove += prayerData[j]/20; 
      } 
     } 
     if (toRemove > 0) { 
      toRemove /= (1 + (0.035 * c.playerBonus[11]));  
     } 
     c.prayerPoint -= toRemove; 
     if (c.prayerPoint <= 0) { 
      c.prayerPoint = 1.0 + c.prayerPoint; 
      reducePrayerLevel(); 
     } 

    } 

说明:我究竟要发生的是,handlePrayerDrain方法获取枚举(for (int j = 0; j < prayerData.length; j++) {)的长度,它后检查哪一个是在(if (c.prayerActive[j]) {)之后,它会检查排放量是多少(toRemove += prayerData[j]/20;

这是我Client.java一些代码(如果这能帮助):

private ArrayList<Prayers.Prayer> activePrayers = new ArrayList<Prayers.Prayer>(); 

public ArrayList<Prayers.Prayer> getActivePrayers() { 
    return activePrayers; 
} 
+0

'prayerData'类型是什么?什么是'c'的类型?什么是'c.prayerActive'类型? “祈祷”的构造函数是什么样的? – sprinter

回答

1

如果你想遍历所有可能的枚举值,尝试:

for (Prayer p : Prayer.values()) { 
    // your logic goes here 
} 
0

如果您使用的是Java 8再流提供相加从enum一定价值的一个相当简洁的方式。虽然有点难以确切地告诉你想做什么,但这里有一个类似的例子,可能会给你想要的东西(我认为:-))。

enum Prayer { 
    ... 
    public double getCost(); 
} 

class Player { 
    ... 
    public boolean hasActivePrayer(Prayer prayer); 
} 

double toRemove = Arrays.stream(Prayer.values()) 
    .filter(player.getActivePrayer()::contains) 
    .mapToDouble(Prayer::getDrain) 
    .sum()/10; 

... 
+0

我已经添加了一些代码从我的Client.java和Prayer.java到我的主要问题,我认为getCost是getDrain,对不对? – xX4m4zingXx

+0

你可以进一步了解我添加到主文章中的新片段吗? – xX4m4zingXx

+0

@ xX4m4zingXx我很高兴能够转换成你的结构,但是我还不清楚c.prayerActive是什么。我假设它是一组布尔值,但很难从你添加的片段中知道。你能否包括你的'c'声明? – sprinter