Java HashMap问题中的Zuul重拍

Java HashMap问题中的Zuul重拍,java,hashmap,bluej,Java,Hashmap,Bluej,我正在用BlueJ做一个Java课程作业。我们需要为基于文本的游戏Zuul添加新功能。我已经决定开始一个库存和项目系统的工作。我很难想出最好的方法来做这件事,所以我只是把它放在一边。这是我的密码。对不起,我还没来得及对所有的事情发表评论。游戏可以编译,但当我运行游戏时,控制台中出现异常 错误: java.lang.NullPointerException at Game.createPlayer(Game.java:15) at Game.<init>(Game.ja

我正在用BlueJ做一个Java课程作业。我们需要为基于文本的游戏Zuul添加新功能。我已经决定开始一个库存和项目系统的工作。我很难想出最好的方法来做这件事,所以我只是把它放在一边。这是我的密码。对不起,我还没来得及对所有的事情发表评论。游戏可以编译,但当我运行游戏时,控制台中出现异常

错误:

java.lang.NullPointerException
    at Game.createPlayer(Game.java:15)
    at Game.<init>(Game.java:7)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:740)
java.lang.NullPointerException
在Game.createPlayer(Game.java:15)
在游戏中。(Game.java:7)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:525)
在bluej.runtime.ExecServer$3.run(ExecServer.java:740)
Game类(这相当于Java中的主类,这是运行游戏的起点):

import java.util.*;
公开课游戏
{
公共游戏()
{
createPlayer();
createItems();
}
私有实体本地播放器;
public void createPlayer(){
Player localPlayer=新玩家(“玩家名称”,0,0,0,0);
localPlayer.equiparm(“头盔”,armourDB.get(“头盔”);//这就是我认为我出错的地方
}
//创建全局hashmap变量
私人散列图武器;
私有HashMap-armordb;
私有HashMap补充数据库;
公共项目(){
//制造武器
weaponsDB=新HashMap();
武器拳头=新武器(“拳头”,“武器”,0,0,0,0,0,“近战”);
武器武器剑=新武器(“剑”,“武器”,0,0,0,0,0,“近战”);
武器武器弓=新武器(“弓”,“武器”,0,0,0,0,0,“远程”);
武器匕首=新武器(“匕首”,“武器”,0,0,0,0,0,“近战”);
武器b.放置(“拳头”,武器拳头);
武器b.放置(“剑”,武器);
武器放下(“弓”,武器弓);
武器放下(“匕首”,武器匕首);
//制造盔甲
ArmorDB=新的HashMap();
盔甲甲护甲=新盔甲(“胸甲”、“胸甲”,0,0,0,0);
盔甲盔甲=新盔甲(“头盔”、“头部”、0,0,0,0);
盔甲B.put(“胸甲”,盔甲甲甲甲);
盔甲B.放置(“头盔”,盔甲头盔);
//补充
supplementDB=newhashmap();
补充剂补充剂健康药水=新补充剂(“健康药水”,0,0);
补充剂补充剂强力药水=新补充剂(“强力药水”,0,0);
补充药水(“健康药水”,补充健康药水);
补充药水,补充药水;
}
}
实体类(玩家类和敌人类的构造):

import java.util.*;
公共类实体
{
私有布尔实体状态;
私有字符串entityName;
私人实体健康;
私人综合电力公司;
私人国际实体HealthRegen;
私有int entityPowerRegen;
私人国际实体攻击能力;
私有HashMap实体设备;
私有ArrayList实体目录;
公共实体(
字符串参数名称,
国际参数卫生组织,
int参数电源,
int参数HealthRegen,
int参数供电,
int参数(攻击功率)
{
entityStatus=true;
entityName=参数名称;
entityHealth=参数Health;
entityPower=参数化电源;
entityHealthRegen=参数HealthRegen;
entityPowerRegen=参数化PowerRegen;
entityAttackPower=参数AttackPower;
entityEquipment=new HashMap();//在初始运行时将所有可能的设备插槽设置为null
entityEquipment.put(“头”,空);
实体设备。放置(“肩部”,空);
实体设备。放置(“箱子”,空);
实体设备。放置(“手”,空);
实体设备。放置(“腿”,空);
实体设备。放置(“英尺”,空);
实体设备。放置(“武器”,空);
entityInventory=new ArrayList();
}
公共布尔getEntityStatus(){
返回实体状态;
}
公共字符串getEntityName(){
返回entityName;
}
public int getEntityHealth(){
回归实体健康;
}
public int getEntityPower(){
返回原动力;
}
public int getEntityHealthRegen(){
返回实体HealthRegen;
}
public int getEntityPowerRegen(){
返回entityPowerRegen;
}
public int getEntityAttackPower(){
返回实体攻击能力;
}
//将物品装备到装备槽中
公共无效设备铠装(字符串参数设备插槽,铠装参数名称){
entityEquipment.put(参数设备插槽,参数名称);
}
公共库存(){
System.out.println(“某物”);
}
}

我认为主要的问题是我不能完全理解hashtags的使用,我需要看一个实例来了解它是如何工作的。有人能帮忙吗?如果您还需要我提供什么,请告诉我。

这就是问题所在:

armourDB.get("Helm")
此时您尚未初始化
armourDB
。如果在
createPlayer()
之前调用
createItems()
,则该特定行应该没有问题。但是您仍然不会初始化名为
localPlayer
的isntance变量。您将只为
createPlayer
中声明的局部变量赋值


老实说,现在还不清楚你想要实现什么,但这是前两个问题…

你应该在
createPlayer
之前调用
createItems
,否则你的ArmorDB在初始化播放器时是
null
import java.util.*;

public class Entity
{
    private boolean entityStatus;

    private String entityName;
    private int entityHealth;
    private int entityPower;
    private int entityHealthRegen;
    private int entityPowerRegen;
    private int entityAttackPower;

    private HashMap<String, Armour> entityEquipment;
    private ArrayList<Item> entityInventory;    

    public Entity(
        String paramEntityName,
        int paramEntityHealth,
        int paramEntityPower,
        int paramEntityHealthRegen,
        int paramEntityPowerRegen,
        int paramEntityAttackPower)
    {
        entityStatus = true;

        entityName = paramEntityName;
        entityHealth = paramEntityHealth;
        entityPower = paramEntityPower;
        entityHealthRegen = paramEntityHealthRegen;
        entityPowerRegen = paramEntityPowerRegen;
        entityAttackPower = paramEntityAttackPower;

        entityEquipment = new HashMap<String, Armour>(); // Set all possible equipment slots to null on initial run
        entityEquipment.put("Head", null);
        entityEquipment.put("Shoulders", null);
        entityEquipment.put("Chest", null);
        entityEquipment.put("Hands", null);
        entityEquipment.put("Legs", null);
        entityEquipment.put("Feet", null);
        entityEquipment.put("Weapon", null);

        entityInventory = new ArrayList<Item>();
    }

    public boolean getEntityStatus(){
        return entityStatus;
    }

    public String getEntityName(){
        return entityName;
    }

    public int getEntityHealth(){
        return entityHealth;
    }

    public int getEntityPower(){
        return entityPower;
    }

    public int getEntityHealthRegen(){
        return entityHealthRegen;
    }

    public int getEntityPowerRegen(){
        return entityPowerRegen;
    }

    public int getEntityAttackPower(){
        return entityAttackPower;
    }

    // Equips the player with an item into the equipment slot
    public void equipArmour(String paramEquipmentSlot, Armour paramArmourName){
        entityEquipment.put(paramEquipmentSlot, paramArmourName);
    }

    public void printInventory(){
        System.out.println("Something");
    }
}
armourDB.get("Helm")