我目前正在做一个模拟游戏的小项目。每个Player
对象都有一个HashMap<Item, Integer>
的库存,其中整数是该项目的数量。
我目前正在尝试在Player
类中编写一个方法,如果玩家的物品清单中有足够的Coins
,则允许玩家从Shop
购买Item
。每个Player
从物品清单中的50个Coins
开始。
虽然,当我试图访问玩家库存中的硬币(使用X1 M8 N1 X)时,我得到了一个“硬币无法解析为变量错误”。
构造器
private String name;
private HashMap<Item, Integer> inventory;
private String location;
public Player (String name){
this.name = name;
location = "Home";
inventory = new HashMap<>();
Resource coins = new Resource("Coins", 1, 1);
Tool pickaxe = new Tool("Pickaxe", 100, 100);
Tool axe = new Tool("Axe", 100, 100);
Tool shovel = new Tool("Shovel", 100, 100);
Crop turnip = new Crop("Turnip", 20, "Spring");
this.inventory.put(coins, 50);
this.inventory.put(pickaxe, 1);
this.inventory.put(axe, 1);
this.inventory.put(shovel, 1);
this.inventory.put(turnip, 10);
}
失败的方法
public void buyItemPierre(Shop pierres, Item item){
if (location.equals("Pierres")){
if (pierres.getForSale().containsKey(item)){
if (inventory.get(**coins**) >= pierres.getForSale().get(item)){ // ERROR HERE
}
}
else{
System.out.println("Sorry, that item is not for sale here");
}
}
else{
System.out.println("You have to visit Pierres before you can buy anything from there!");
}
}
我试过在main方法中示例化对象,尽管我得到了相同的错误。关于如何在HashMap中引用对象作为键,一定有我不明白的地方...我还能怎么检查播放器是否有足够的coins
?提前感谢!
1条答案
按热度按时间0pizxfdo1#
您已经在构造函数中将
coins
声明为局部变量。所以构造函数一完成,这个变量就消失了,你仍然有 object 作为map中的键,但是如果你想用
coins
变量在map中查找它,你必须声明它是一个成员(在构造函数之外)。