有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,如何使用数组为单个字符串分配多个值?

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

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

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


共 (3) 个答案

  1. # 1 楼答案

    您可以在java中使用Map

    Map<String,List<Integer>> enemies1 = new HashMap<>();
    enemies1.put("str1",list1);
    enemies1.put("str2",list2);
    enemies1.put("str3",list3);
    
  2. # 2 楼答案

    最合适的方法是用一个对象来表示你所拥有的值的组合

    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;
        }
    }
    

    然后,如果你愿意的话,用地图来表示这一点

    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;
        } 
    } 
    

    并将其用作地图中的名称/键

    你最好使用Lombok,如果你愿意的话,可以使用链式setter,而且它可以减少很多样板代码(getter、setter、constructor)。用^{}检查^{}

  3. # 3 楼答案

    您可以创建代表敌人的类

    public class Enemy {
        private int hp;
        private int mp;
        private int atk;
    
        public Enemy(int hp, int mp, int atk) {
            this.hp = hp;
            this.mp = mp;
            this.atk = atk;
        }
    
        public int getHp() {
            return hp;
        }
    
        public void setHp(int hp) {
            this.hp = hp;
        }
    
        public int getMp() {
            return mp;
        }
    
        public void setMp(int mp) {
            this.mp = mp;
        }
    
        public int getAtk() {
            return atk;
        }
    
        public void setAtk(int atk) {
            this.atk = atk;
        }
    }
    

    然后像这样使用:

        HashMap<String, Enemy> map = new HashMap<>();
    
        map.put("Weak Skeleton", new Enemy(100, 0, 100));
        map.put("Blue Slime", new Enemy(50, 0, 25));