2016-11-05 3 views
0

Я пытаюсь сделать простую «аптечную доставку» на 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 ""; 
} 

ответ

1

Ваш Supplier класс имеет статический (и, следовательно, глобальный) listOfDrugs

Я думаю, что вы хотите иметь это

public class Supplier { 
    //some private members goes here 
    private Map <Drug, Integer> listOfDrugs = new HashMap <Drug, Integer>(); 
    ... 
} 
.
+0

Удивительно! Как я пропустил это ... Это решило мою проблему и мое несчастье. :) – Calihog

Смежные вопросы