я не понимаю, в методе buy есть первое условие существует ли в списке такое лекарство. допустим его в списке не существует, но в следующей же строке мы вызываем это лекарство из списка! как? должeн вылезти null!!!
по логике в первый if должна быть вставлена такая же строка как в методе sell allDrugs.put(drug, 0);
package com.javarush.task.task17.task1715;
import java.util.HashMap;
import java.util.Map;
public class DrugsController {
public static Map<Drug, Integer> allDrugs = new HashMap<Drug, Integer>(); // <Лекарство, Количество>
static {
Drug panadol = new Drug();
panadol.setName("Панадол");
allDrugs.put(panadol, 5);
Drug analgin = new Drug();
analgin.setName("Анальгин");
allDrugs.put(analgin, 18);
Drug placebo = new Drug();
placebo.setName("Плацебо");
allDrugs.put(placebo, 1);
}
public void buy(Drug drug, int count) {
String name = Thread.currentThread().getName();
if (!allDrugs.containsKey(drug)) {
System.out.println("Нет в наличии");
}
Integer currentCount = allDrugs.get(drug);
if (currentCount < count) {
System.out.println(String.format("%s хочет %s %d шт. В наличии - %d", name, drug.getName(), count, currentCount));
} else {
allDrugs.put(drug, (currentCount - count));
System.out.println(String.format("%s купил(а) %s %d шт. Осталось - %d", name, drug.getName(), count, (currentCount - count)));
}
}
public void sell(Drug drug, int count) {
System.out.println(Thread.currentThread().getName() + " Закупка " + drug.getName() + " " + count);
if (!allDrugs.containsKey(drug)) {
allDrugs.put(drug, 0);
}
Integer currentCount = allDrugs.get(drug);
allDrugs.put(drug, (currentCount + count));
}
}
Integer currentCount = allDrugs.get(drug);возвращает 0 при при отсутсвии и дальше логика работает верно