Java HashMap问题中的Zuul重拍
我正在用BlueJ做一个Java课程作业。我们需要为基于文本的游戏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
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")