проблема со списком массивов jsp
-
06-09-2019 - |
Вопрос
я пытаюсь создать массив, который не добавляет элементы, если значение / размер больше 20.это решение добавляет только 1 элемент, а затем останавливается, даже если значение меньше 20.как мне изменить его так, чтобы он принимал значения не более 20?
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;
}
но ни то, ни другое не сработало.итак, где мне разместить инструкцию return?
Решение
Ты возвращаешься из addItem
метод перед добавлением элемента в список.
if(isize <= 20)
{
LineItem lineItem = items.get(i);
lineItem.setQuantityCredit(credit);
return; // This is the problem
}
Другие советы
Я просто хочу уточнить ваш код, прежде чем попытаюсь ответить.
// 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" равен нулю, и поэтому цикл for пропускается.При втором вызове этого метода значение "isize" равно нулю, и поэтому цикл выполняется один раз и возвращается перед добавлением.
Я не уверен, что вы пытаетесь сделать внутри цикла for, поскольку это действительно не имеет смысла.Если вы просто хотите, чтобы массив элементов был ограничен 20 или меньше, просто добавьте
if (items.size() < 20) {
items.add(item);
}
к вашему коду.Если есть какая-то более сложная логика, которую вы пытаетесь использовать, то объясните свои цели.