2016-11-05 2 views
0

Java에서 간단한 "약국 전달"프로그램을 만들려고 노력하고 있지만이 논리적 오류가 하루 종일 울려 퍼지지 않았습니다. 나는 아주 간단하다고 생각하지만, 이해할 수 없다. 누군가가 이것을 풀 수 있다면 도움이 될 것이다.Java의 컨테이너를 반복하면서 논리적 오류가 발생하는 경우

전체적으로 3 가지 등급 - 의약품, 공급자 및 주문이 있습니다.

의약품에는 의약품 (이름 및 가격)에 대한 정보가 있습니다. 공급자는 (마약, 수량)이 포함 된지도를 비롯한 몇 가지 다른 정보를 보유하고 있습니다. 주문한 주문 및 (공급 업체)가있는 벡터가있는 주문이 있습니다.

기본 개념은 Order 클래스의 2 컨테이너를 .txt 파일로 채우는 것입니다. 한 줄의 구문은 다음과 같습니다. - Ordered_drugs_name Ordered_drugs_quantity (주문지도에이 2 개를 넣음) .. 나머지는 Suppliers 객체를 초기화하고 벡터에 넣기위한 비슷한 매개 변수입니다.

이제이 2 개의 컨테이너를 채운 후에 주문 맵에서 첫 번째 약물을 가져 오는 방법 (또는 적어도 그렇게한다고 생각합니다)을 가지고 공급자 벡터를 반복하여 공급자가 있는지 알아 봅니다. 그런 양의이 약을 마셨다. 물론 공급 업체를 반복하기 시작하면 현재 공급 업체에 약품이 있는지 확인해야하므로 공급 업체의 약품지도에서 반복됩니다.

문제는 2 개의 공급자와 2 개의 주문에 대한 간단한 예를 통해 1 개의 공급 업체에서만 약 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

관련 문제