Pregunta

Estoy tratando de crear una matriz que no añade el artículo en si el valor / tamaño es mayor de 20. esta solución se agrega solamente 1 artículo y luego se detiene incluso si el valor es inferior a 20. ¿Cómo puedo cambiar de modo que sólo admiten valores hasta un 20 máx.

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;
            }
        }
    }
}

creo wat u dijo que es correcto, así que probé este

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; 
} 

pero tampoco funcionó. por lo RHO puedo colocar declaración d cambio?

¿Fue útil?

Solución

Esta regresar del método addItem antes de añadir el artículo a la lista.

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

Otros consejos

Sólo quiero aclarar su código antes de intentar responder.

// 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);

La razón de que es la adición de un único elemento y no más es el siguiente: La primera vez que este método se llama "ISIZE" es igual a cero y por lo tanto el bucle se omite. La segunda vez que este método se llama el "ISIZE" es igual a cero y por lo tanto el bucle va una vez y vuelve antes de añadir.

No estoy seguro de lo que está intentando hacer dentro del bucle, ya que realmente no tiene sentido. Si lo que desea es la matriz de elementos que se limita a 20 o menos sólo tiene que añadir

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

a su código. Si hay algo de lógica más compleja que está intentando a continuación, explicar sus objetivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top