【发布时间】:2022-12-31 08:37:11
【问题描述】:
我目前正在做一个模拟游戏的小项目。每个Player 对象都有一个库存,它是一个HashMap<Item, Integer>,其中整数是该项目的数量。
我目前正在尝试在 Player 类中编写一个方法,如果玩家的库存中有足够的 Coins,它允许玩家从 Shop 购买 Item。每个 Player 的库存中都以 50 Coins 开头。
虽然,当我试图访问玩家库存中的硬币时(使用inventory.get(coins)),我得到一个“硬币无法解析为变量错误”。
构造函数
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?先感谢您!
【问题讨论】:
-
这可以通过适当使用变量来解决,但老实说:不要。不要使用像它们这样的对象作为映射键。他们不会给你带来任何好处。使用静态的东西,如字符串“硬币”或自己的枚举。更加灵活。