Каков наилучший способ сопоставить целое число с объектом. С объектом в качестве ключа - PullRequest
0 голосов
/ 02 марта 2020

Эй, это может быть глупый вопрос, но хотя я могу использовать функцию put для отображения объектов в целое число:

product Tuna = new product(1, nutrientsIn);

product Milk = new product(0, nutrientsIn2);

HashMap<product, Integer> productQuantity = new HashMap<product, Integer>();

productQuantity.put(Tuna, 2);

productQuantity.put(Milk, 4);

Diet.totalNutrients(productQuantity);

Если я пытаюсь получить доступ к значению, используя имя объекта в качестве ключа :

System.out.printf("%d\n", productQuantity.get(Milk));

Я получаю ошибку: не могу найти символ. То, что я предполагаю, означает, что он ищет переменную Milk.

Это правильный путь к go по этому поводу, и если да, то как я могу или есть лучший способ.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020
  1. ошибка: невозможно найти символ

    • Вы получаете это, потому что используете переменную MILK вне ее области действия.
  2. Альтернативный путь

    • Вы можете сделать Enum для product

Код для вашего текущего подхода

public class Sample {
    public static void main(String[] args) {
        Product Tuna = new Product(1, "nutrientsIn");

        Product Milk = new Product(0, "nutrientsIn2");

        HashMap<Product, Integer> productQuantity = new HashMap<Product, Integer>();

        productQuantity.put(Tuna, 2);

        productQuantity.put(Milk, 4);

//        Diet.totalNutrients(productQuantity);

        // Use this if in same block
        System.out.printf("%d\n", productQuantity.get(Milk));
        // Use this if in some other block (where getting the error)
        Product makeMilkObject = new Product(0, "nutrientsIn2");
        System.out.printf("%d\n", productQuantity.get(makeMilkObject));
    }
}

class Product{
    int key;
    String nutrient;
    Product(int key, String nutrient){
        this.key = key;
        this.nutrient = nutrient;
    }

    public int getKey() {
        return key;
    }

    public String getNutrient() {
        return nutrient;
    }

    @Override
    public boolean equals(Object obj) {
        return (this.key == ((Product)obj).getKey()) && (this.getNutrient().equals(((Product) obj).getNutrient()));
    }

    @Override
    public int hashCode() {
        return this.getKey();
    }
}
0 голосов
/ 02 марта 2020

Это могут быть разные проблемы, я не могу воспроизвести вашу проблему; со своей стороны он работает нормально, и вывод должен быть: "4".

Вот мой код:

Cat cat = new Cat("Cat", 17);
Cat dog = new Cat("Dog", 25);
HashMap<Cat, Integer> test = new HashMap<>();
test.put(cat, 2);
test.put(dog, 4);
System.out.println(test.get(cat));
System.out.printf("%d\n", test.get(dog));

И вывод: 2 4

...