java - 如何使用数组为 Java 中的单个字符串分配多个值?

标签 java arrays

目前正在创建一个 MUD 游戏,这是我在 Java 中的第一个正式项目,我已经设置了知识和背景,我只需要开始实际的代码。我首先尝试创建一组这样的敌人:

//                       Name,     HP,  MP, ATK
enemies[] = {"Weak Skeleton:",    100,   0, 100;
             "Blue Slime:",        50,   0,  25;
             "Novice Rogue Mage:", 25, 100,   0;}

但我显然不能像那样在 Java 中那样做。有没有一种方法可以在 Java 中为字符串分配一个值(有点像 python 中的键值对,但多个值分配给一个字符串),如果有的话,我有没有办法访问和操作分配给字符串?

最佳答案

最恰当的做法是让一个对象代表您拥有的值的组合;

public class Enemy {

    private String name;
    private Integer healthPoint;
    private Integer manaPoint;
    private Integer attackPower;

    // getter, setter, constructors
    // example constructor
    public Enemy(String name, Integer hp, Integer mp, Integer ap) {
        this.name = name;
        this.healthPoint = hp;
        this.manaPoint = mp;
        this.attackPower = ap;
    }
}

如果您愿意,可以用 map 表示;

List<Enemy> enemies = new ArrayList<>();
enemies.add(new Enemy("Weak Skeleton", 100, 0, 100));
enemies.add(new Enemy("Blue Slime", 50, 0, 25));
enemies.add(new Enemy("Novice Rogue Mage", 25, 100, 0));
Map<String, Enemy> enemyMap = enemies.stream().collect(Collectors.groupingBy(Enemy::getName));

因此,如果您需要访问和编辑任何值,很容易通过;

enemyMap.get("Weak Skeleton").setAttackPower(75);

或者添加一个新的敌人;

Enemy dragonBoss = new Enemy("Dragon Boss", 1000, 500, 250);
enemyMap.put(dragonBoss.getName(), dragonBoss);

不过,我建议使用一些枚举来识别每个敌人,尝试使用名称字符串访问并不是最佳做法。

public enum EnemyType { 

    WEAK_SKELETON("Weak Skeleton"), BLUE_SLIME("Blue Slime"), NVC_ROGUE_MAGE("Novice Rogue Mage"); 

    private String name; 

    public String getName() { 
        return this.name; 
    }

    private EnemyType (String name) {
        this.name = name;
    } 
} 

并将其用作 map 中的名称/键。

你最好使用 Lombok,如果你愿意,可以链接 setter,而且它减少了大量样板代码(getter、setter、构造函数)。检查@Data@Accessors(chain = true)

关于java - 如何使用数组为 Java 中的单个字符串分配多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53274690/

相关文章:

JavaFx VBox 中心图像

java - 多个 dex 文件使用 TMDb 依赖项定义 Ljavax/inject/Inject

C 编程。比较数组的内容。

c++ - 用文件路径填充 WCHAR 数组

javascript - API数据未显示在表中,需要显示进度加载(延迟加载)

java -jar 类路径引用耳朵内的 jar

java - 在 Android : java. io.FileNotFoundException 中保存文件。打开失败:ENOENT(没有那个文件或目录)

java - JAXB 在解码时将多个属性转换为一种类型

arrays - 根据匿名哈希数组中的另一个值直接访问值

java - 为什么我的程序在字节数组中保存 1.5Gb 内存?