gpt4 book ai didi

java - 操作一组变量的有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:01 25 4
gpt4 key购买 nike

我正在制作一个“基因模拟器”,在某些时候我想比较基因中的数据以在个体中设置结果。我找到了一个解决方案,但似乎很不切实际,我确信有一个正确的方法来做到这一点

现在,我在处理操作的支持类中使用静态方法,但我担心维护会很烦人,因为我计划经常修改属性列表。

public class GeneOps {  
public static AttributeList AddAttributeLists (AttributeList a, AttributeList b) {
AttributeList x=new AttributeList();

x.agressiveness= a.agressiveness+b.agressiveness;
x.bravery=a.bravery+b.bravery;
x.speed=a.speed+b.speed;
//Repeat for all attributes

return x;
}
}

这可行,但我希望每次我决定向列表添加某些内容时都会自动更新一些内容 EG:如果我添加一个名为“sneak”的属性,我希望在不修改方法的情况下计算它。

最佳答案

一种选择是,如果所有属性都由数值表示,那么您可以将实际属性设为枚举,例如:

public enum Attribute {
AGGRESSIVENESS, BRAVERY, SPEED, WISDOM, INTELLIGENCE, CHARISMA, DEXTERITY // more as needed
}

然后在保存属性的类中,使用 Map<Attribute, Integer>可以分配 EnumMap<Attribute, Integer>如果需要,可以通过使用枚举作为键迭代映射来轻松地将两个属性映射添加在一起:

// add all values of this object's attributes with 2nd map
public void addAttributes(Map<Attribute, Integer> attributes2) {
for (Attribute attribute : Attribute.values()) {
int value = attributes.get(attribute) + attributes2.get(attribute);
attributes.put(attribute, value);
}
}

更安全的方法是检查空(null) map 值并进行更正:

// add all values of this object's attributes with 2nd map
public void addAttributes(Map<Attribute, Integer> attributes2) {
for (Attribute attribute : Attribute.values()) {
int value = attributes.get(attribute) != null ? attributes.get(attribute) : 0;
int value += attributes2.get(attribute) != null ? attributes2.get(attribute) : 0;
attributes.put(attribute, value);
}
}

例如:

public class Individual {
private Map<Attribute, Integer> attributes;

// default constructor
public Individual() {
// create map and initialize all attributes to 0
attributes = new EnumMap<>(Attribute.class);
for (Attribute attribute : Attribute.values()) {
attributes.put(attribute, 0);
}
}

// constructor that sets attributes
public Individual(Map<Attribute, Integer> attributes) {
this.attributes = attributes;
}

public Map<Attribute, Integer> getAttributes() {
return attributes;
}

public void setAttributes(Map<Attribute, Integer> attributes) {
this.attributes = attributes;
}

public void setAttribute(Attribute attribute, int value) {
attributes.put(attribute, value);
}

public int getAttribute(Attribute attribute) {
return attributes.get(attribute).intValue();
}

// add all values of this object's attributes with 2nd map
public void addAttributes(Map<Attribute, Integer> attributes2) {
for (Attribute attribute : Attribute.values()) {
int value = attributes.get(attribute) != null ? attributes.get(attribute) : 0;
int value += attributes2.get(attribute) != null ? attributes2.get(attribute) : 0;
attributes.put(attribute, value);
}
}

public void addAttributes(Individual individual2) {
addAttributes(individual2.getAttributes());
}

public String displayAttributes() {
StringBuilder sb = new StringBuilder();
// ... iterate through the attributes appending to the StringBuilder
return sb.toString();
}
}

关于java - 操作一组变量的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57339148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com