2014-11-22 8 views
0

슈퍼마켓의 셀프 체크 아웃 카운터와 비슷한 주문 프로그램을 작성 중입니다. 광고 주문이 생성되는 동안 각 광고 항목은 개체이며 arraylist에 보관됩니다.
LineItem 클래스에는 ItemID와 ItemQuantity의 두 가지 변수가 있습니다. 메서드, incQuantity는 수량을 1 씩 증가시키는 데 사용됩니다.arraylist를 작성하고 lineItem을 추가하는 데 아무런 문제가 없지만 동일한 ItemID를 가진 추가 항목이있을 때 incQuantity 메서드를 호출 할 수는 없습니다. get, remove 및 add 시퀀스를 사용하여 객체를 업데이트하고 있습니다. 개체에 직접 액세스하고 arraylist에서 제거하고 다시 추가하는 오버 헤드없이 incQuantity 메서드를 호출하는 방법이 있어야합니다. 아래 테스트 코드를 참조하십시오.arraylist (자바)

orderSheet.get(0).incQuantity() 트릭을 수행해야합니다

public static class LineItem{ 
    private String ItemID ; 
    private int ItemQuantity; 

    public LineItem(String ID) { 
     ItemID = ID; 
     ItemQuantity = 1; //upon first occurrence of an item, qty is initialized to 1 
} 
    public void incQuantity() { 

    ItemQuantity++; 
} 
} 



private static void TestItems() { 
     ArrayList <LineItem> orderSheet = new ArrayList<LineItem>(); 
     LineItem newLine = new LineItem("12345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("121233445"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("129767345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("5454120345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("0987123125"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("65561276345"); 
     orderSheet.add(newLine); 
     // Increment Quantity of Element 0 below 
     LineItem updateLine = orderSheet.get(0); 
     updateLine.incQuantity(); 
     orderSheet.remove(0); 
     orderSheet.add(updateLine); 

} 

답변

1

당신은 그것을 다시 추가, 제거 단지 항목을 가져오고 그 메소드를 호출 할 필요가 없습니다.

0

제 제안은이 문제를 해결하기위한 간단한 해시 맵을 사용하는 것입니다. 지도는 단순히 항목 ID를 키로, 항목 클래스를 값으로 구성합니다. 항목 클래스에는 증분 카운터 메서드도 있습니다. 이 방법을 사용하면 항목 ID가지도에 있는지 확인할 수 있습니다. 그렇다면이 메서드를 호출하여 개수를 늘립니다.

0

이 부분을 참조하십시오. orderSheet에서 모든 항목의 수량을 늘리는 예제를 제공합니다. 하지만 난 incQuantity() 호출하는 동안 항목 ID를 확인해야 할 것 같아요.

Iterator<LineItem> it = orderSheet.iterator(); 
while(it.hasNext()) {   
    it.next().incQuantity(); 
}