package com.javarush.task.task17.task1715;
import java.util.ArrayList;
import java.util.List;
/*
Аптека
*/
public class Solution {
public static DrugsController drugsController = new DrugsController(); //1. Создается объект
public static boolean isStopped = false;
public static void main(String[] args) throws InterruptedException {
Thread apteka = new Thread(new Apteka()); //2. Создаются объекты действия
Thread man = new Thread(new Person(), "Мужчина");
Thread woman = new Thread(new Person(), "Женщина");
apteka.start(); //3. Запускаются потоки
man.start();
woman.start();
Thread.sleep(1000); //4. Задержка в 1сек и изменение переменной isStopped = true;
isStopped = true;
}
public static class Apteka {
}
public static class Person {
}
public static int getRandomCount() {
return (int) (Math.random() * 3) + 1; //5.Возвращает случайное значение RandomCount
}
public static Drug getRandomDrug() { //6. Возращает значение RandomDrug, но как считается ?
int index = (int) ((Math.random() * 1000) % (drugsController.allDrugs.size()));
List<Drug> drugs = new ArrayList<>(drugsController.allDrugs.keySet());
return drugs.get(index);
}
private static void waitAMoment() { //7. Метод waitAMoment делает задержку в 0,1сек
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public class Drug {
private String name;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
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 sell(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 buy(Drug drug, int count) { //метод покупки
System.out.println("Закупка " + drug.getName() + " " + count);
if (!allDrugs.containsKey(drug)) { //если не совпадает название лекарства со списком лекарств,
// то добавлется лекарство и кол-во равное 0
allDrugs.put(drug, 0);
}
Integer currentCount = allDrugs.get(drug); //Что такое Integer currentCount = allDrugs.get(drug)? не могу до конца понять
allDrugs.put(drug, (currentCount + count));
}
}
Pavel
36 уровень
правильно понял код ?
Архивный
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев ВикторMaster
3 декабря 2017, 15:29решение
нет метод возвращает объект Drag, выбранный с помощью рандома по формуле:
_____________________________________
тут мы просто берем количество оставшегося товара.
________________________________
По русски:
Чтобы не писать длинный if-else и не дублировать код, во время закупки. Если лекарства нет у нас, то мы добавляем его в список с количеством 0.
Дальше просто складываем прибывшее количество с имеющимся.
+4