Ваш метод takeFood
немного перепутался.
Я считаю, что вы хотите передать quantity
вашему методу takeFood
, так же, как и с вашим методом addFood
.
С помощью вашего текущего кода вы проверяете, содержит ли ваша карта food
ключ. Если это не так, вы пытаетесь удалить элемент с этим ключом, который ничего не сделает, потому что ваша карта не содержит этот ключ. Если ваша карта содержит ключ food
, вы получаете значение для этого ключа, а затем вызываете функцию remove
на карте хэша с двумя параметрами. Однако функция remove
функции хэш-карты не принимает двух параметров. Этот код даже не компилируется. Метод remove
просто выведет элемент из карты с помощью ключа, который вы передадите ему.
Что вы хотите сделать, это получить текущее значение с карты, тогда если quantity
, который вы передадите в свой метод takeFood
, больше, чем текущее значение, выкиньте какое-то исключение или верните какое-то сообщение. Если запрошенный quantity
меньше, чем текущая сумма в вашем продовольственном магазине, уменьшите текущее значение на quantity
, а затем верните эту новую сумму на свою карту для ключа food
. Кроме того, если ваш ключ food
не существует на вашей карте хэша, вместо того, чтобы пытаться сделать remove
ключ, который не существует на вашей карте хэша, вам нужно будет выбросить другое исключение или вернуть какое-то сообщение, указывающее, что нет ничего такого тип food
в вашем Foodstore
.
Вот что это будет выглядеть следующим образом:
public void takeFood(String food, int quantity) {
if (register.containsKey(food)) { //if register contains this food
Integer oldAmount = register.get(food); //get old amount from register
if (quantity > oldAmount) {
throw new Exception("Not enough " + food + " in foodstore. There is only " + oldAmount + " " + food + "."); //there is not that much in the foodstore - throw an error
} else {
Integer newAmount = oldAmount - quantity; //decrement the quantity from the old amount
register.put(food, newAmount); //set the value in the hash map to new amount
}
}
else {
throw new Exception("There is no " + food + " in the foodstore.");
}
}
Тогда в вашем Zookeeper
классе, я предполагаю, что у вас есть ссылка на ваш зоопарк Foodstore
, а затем Enclosure
. Тогда в вашем классе Enclosure
, это продовольственный магазин должен быть доступен из общедоступного метода.
public class Enclosure {
private Foodstore foodstore = new Foodstore();
public Foodstore getFoodstore {
return foodstore;
}
}
Затем в Zookeeper
классе, вы могли бы переместить еду вокруг, как это:
public class Zookeeper {
private Foodstore zooFoodstore;
private Enclosure enclosure;
//constructor to pass in references to the zoo's foodstore and the enclosure
public Zookeeper(Foodstore zooFoodstore, Enclosure enclosure) {
this.zooFoodstore = zooFoodstore;
this.lionEnclosure = lionEnclosure;
}
public void aMonthPasses() {
int quantity = 20; //get the amount of food you want to transfer here
String food = "meat"; //get the type of food you want to transfer here
try {
zooFoodstore.takeFood(food, quantity);
lionEnclosure.getFoodstore().addFood(food, quantity);
} catch (Exception ex) {
//food didn't exist in zoo foodstore or there wasn't enough
}
}
}
На 'java.util.HashMap' не существует метод' удалить (, ) '. –
hotzst