Я пытаюсь сделать простую «аптечную доставку» на Java, но я весь день зациклился на этой логической ошибке, и я просто не могу ее обернуть. Я почти уверен, что это что-то очень простое, но я просто этого не понимаю - я бы очень признателен за помощь, если кто-то сможет это решить.Разочарование логической ошибки при повторении через контейнеры в Java
В целом, у меня есть 3 класса - Наркотик, поставщик и заказ.
Препарат содержит информацию о наркотиках (название и цена). Поставщик имеет некоторую другую информацию, включая карту с (наркотики, количество). Заказ содержит карту с упорядоченным и векторным с (Поставщики).
Основная идея состоит в том, чтобы заполнить 2 контейнера класса Order с помощью .txt-файла. Синтаксис одной строки имеет следующий вид: - Ordered_drugs_name Ordered_drugs_quantity (поместите эти 2 в карту заказов) .., а остальные - аналогичные параметры для инициализации объекта Suppliers и поместите его в вектор.
Теперь, после того как я заполнил эти 2 контейнера, у меня есть метод, который принимает (или, по крайней мере, я думаю, что он делает) первый препарат из карты заказов и выполняет итерации над вектором поставщиков, чтобы найти, есть ли у поставщиков, которые имеют такое количество этого препарата. Конечно, когда он начинает итерации поставщиков, он должен проверить, есть ли у нынешнего поставщика лекарство, поэтому он начинает итерацию с карты поставщика, которую он имеет.
Проблема заключается в том, что с простым примером 2 поставщиков и 2 заказов, из которых только 1 из них продается одним из поставщиков, и у него есть необходимое количество, я получаю оба поставщика для распечатки (тот даже не продает этот препарат).
Вот какой код, извините за длинный пост. :(
public class Supplier {
//some private members goes here
private static Map <Drug, Integer> listOfDrugs = new HashMap <Drug, Integer>();
Supplier(String n, String rep, String repPhoneNum, String drugName, double drugPrice, int stock) {
this.supplierName = n;
this.representative = rep;
this.representativesPhoneNumber = repPhoneNum;
listOfDrugs.put(new Drug(drugName, drugPrice), stock);
}
public boolean isDrugInStock(Drug drug, int quantity) {
int stock;
for (Entry<Drug, Integer> entry : listOfDrugs.entrySet())
{
if(entry.getKey().getDrugsName().equalsIgnoreCase(drug.getDrugsName())) {
stock = (int) listOfDrugs.get(entry.getKey());
if(stock >= quantity) {
return true;
}
}
}
return false;
}
и класс Приказы:
public class Orders {
private Map <Drug, Integer> orderedDrugs = new HashMap <Drug, Integer>();
private Vector<Supplier> suppliers = new Vector <Supplier>();
Orders(String fileName) throws IOException {
//the reading form a .txt file goes here
}
public String order() {
for (Entry<Drug, Integer> entry : orderedDrugs.entrySet()) {
int quantity = orderedDrugs.get(entry.getKey());
for(Supplier s : suppliers) {
if(s.isDrugInStock(entry.getKey(), quantity)) {
System.out.println(s.toString());
}
}
}
return "";
}
Удивительно! Как я пропустил это ... Это решило мою проблему и мое несчастье. :) – Calihog