2009-05-31 3 views
0

값/크기가 20보다 크면 항목을 추가하지 않는 배열을 만들려고합니다. 이 솔루션은 값이 20보다 작은 경우에도 항목을 하나만 추가 한 다음 중지합니다. 어떻게 수행합니까? 최대 20 개의 값만 허용하도록 변경합니다.jsp 배열 목록 문제가 발생했습니다

package business; 
import java.io.Serializable; 
import java.util.ArrayList; 

public class Cart implements Serializable 
{ 
private ArrayList<LineItem> items; 

    public Cart() 
{ 
    items = new ArrayList<LineItem>(); 
} 

    public ArrayList<LineItem> getItems() 
{ 
    return items; 
} 

    public int getCount() 
{ 
    return items.size(); 
} 

    public void addItem(LineItem item) 
{ 
    String code = item.getProduct().getCode(); 
    int quantity = item.getQuantity(); 
    double credit = item.getProduct().getCHours(); 
    String credit2 = Double.toString(item.getProduct().getCHours()); 
    int isize = items.size(); 


    for (int i = 0; i < items.size(); i++) 
    { 
     if(isize <= 20) 
     { 
     LineItem lineItem = items.get(i); 
      lineItem.setQuantityCredit(credit); 
      return; 
     } 
    } 
    items.add(item); 
    } 

    public void addItemCredit(LineItem item) 
{ 
     double credit = item.getProduct().getCHours(); 
     String credit2 = Double.toString(item.getProduct().getCHours()); 
     String code = item.getProduct().getCode(); 

    for (int i = 0; i < 20; i++) 
    { 
     LineItem lineItem2 = items.get(i); 
      lineItem2.setQuantityCredit(credit); 
      return; 

     } 
    items.add(item); 

    } 

public void removeItem(LineItem item) 
{ 
     String code = item.getProduct().getCode(); 
     for (int i = 0; i < items.size(); i++) 
     { 
      LineItem lineItem = items.get(i); 
      if (lineItem.getProduct().getCode().equals(code)) 
      { 
       items.remove(i); 
       return; 
      } 
     } 
    } 
} 

내가 유를 잘 그래서 난이

if(isize <= 20) 
{ 
LineItem lineItem = items.get(i); lineItem.setQuantityCredit(credit); 
} 
return; 
} 
items.add(item); 
} 


and 


if(isize <= 20) 
{ 
LineItem lineItem = items.get(i); lineItem.setQuantityCredit(credit); 
} 
} 
items.add(item); 
return; 
} 

을 시도했지만 둘 다 작동되는 것을 특징으로 와트 생각합니다. 그럼 내가 진술서를 돌려 놓을 까?

+0

배열이 필요한 이유가 있습니까? – Milhous

+0

addItem() 메서드가 무엇을하는지 자세히 설명해 주시겠습니까? –

+0

@fdon JSP와 관련이 없으므로 질문 제목에 JSP가 없어야합니다. 이것은 순수 자바입니다. 또한 문제를 일으키는 코드 만 포함시켜야합니다. – martinatime

답변

1

목록에 항목을 추가하기 전에 addItem 방법에서 돌아오고 있습니다.

if(isize <= 20) 
{ 
    LineItem lineItem = items.get(i); 
    lineItem.setQuantityCredit(credit); 
    return; // This is the problem 
} 
+0

하이 덕분 많이 을 올리려면 시간 i에 바쳐 유 오른쪽 그래서이 시도되는 것을 생각하면 와트 (ISIZE <= 20) { LineItem을 LINEITEM = items.get (I); lineItem.setQuantityCredit (credit); } return; } items.add (item); } 및 경우 (ISIZE <= 20) { LineItem을 LINEITEM = items.get (I); lineItem.setQuantityCredit (credit); } } items.add (item); 반환; } 하지만 둘 다 작동하지 않습니다. 그럼 내가 진술서를 돌려 놓을 까? –

0

답변을 시도하기 전에 코드를 명확히하고 싶습니다.

// get the total number of items in the cart 
int isize = items.size(); 

// loop through the items 
    // if there are more than 20 items then set the credit quantity and 
    // return without adding 
    // otherwise do nothing 
for (int i = 0; i < items.size(); i++) 
{ 
    if(isize <= 20) 
    { 
    LineItem lineItem = items.get(i); 
     lineItem.setQuantityCredit(credit); 
     return; 
    } 
} 
// if there are more than 20 items add another 
items.add(item); 

단지 하나의 항목을 추가하고, 다음과 같이 더 이상 없다는 이유 :이 방법은 "ISIZE"라고 처음 0 인 때문에 for 루프 스킵 . 이 메서드를 두 번째로 호출하면 "isize"가 0이므로 루프가 한 번 이동하여 추가 전에 반환됩니다.

for 루프에서 수행하려고하는 작업이 실제로 이해가되지 않는다고 확신 할 수 없습니다. items 배열을 20 개 이하로 제한하려면 코드에

if (items.size() < 20) { 
    items.add(item); 
} 

을 추가하기 만하면됩니다. 시도하고있는 좀 더 복잡한 논리가 있다면 목표를 설명하십시오.