对象作为HashMap中的键-如何引用它们(java)

tjrkku2a  于 2023-11-20  发布在  Java
关注(0)|答案(1)|浏览(127)

我目前正在做一个模拟游戏的小项目。每个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?提前感谢!

0pizxfdo

0pizxfdo1#

您已经在构造函数中将coins声明为局部变量。

Resource coins = new Resource("Coins", 1, 1);

所以构造函数一完成,这个变量就消失了,你仍然有 object 作为map中的键,但是如果你想用coins变量在map中查找它,你必须声明它是一个成员(在构造函数之外)。

private Resource coins= new Resource("Coins", 1, 1);

相关问题