问题陈述:为下列场景设计一个系统:
1.项目列表包含多个项目的项目代码、名称、比率和数量。
针对上述问题,我创建了一个具有以下成员的Item类:
private String name;
private double rate;
private long code;
private int quantity;
public Item()
public Item(String name, double rate, long code, int quantity)
public Item(Item item)
public String toString()
public String getName()
public void setName(String name)
public double getRate()
public void setRate(double rate)
public long getCode()
public void setCode(long code)
public int getQuantity()
public void setQuantity(int quantity)现在我已经创建了一个Shop类来访问Item类,以便对一个项执行所有操作.这里是商店班的一部分。
private ArrayList<Item> ItemList;
private Iterator<Item> itr;
public Shop() {
System.out.println("New Shop for Items created.");
ItemList = new ArrayList<Item>();
itr= ItemList.iterator();
}
public Item search(long code) {
Item item;
while(itr.hasNext()) {
item = new Item(itr.next());
if (item.getCode() == code) {
return item;
}
}
return null;
}
public void addItem() throws InputMisMatchEXception{
long aCode;
String aName;
double aRate;
int aQuantity;
Item foundItem;
System.out.println("Enter Item code:");
aCode = sc.nextLong();
foundItem = search(aCode);
if (foundItem == null) {
System.out.println("Item name : ");
aName = sc.next();
System.out.println("Rate : ");
aRate = sc.nextDouble();
System.out.println("Quantity : ");
aQuantity = sc.nextInt();
Item aItem = new Item(aName, aRate, aCode, aQuantity);
ItemList.add(aItem);
} else if (foundItem != null) {
System.out.println("Item exists");
}
}现在,当我添加一个新的项目时,它是有效的。但是当我添加第二个元素时,它会抛出一个
ConcurrentModificationException
下面是一个示例输出:
新商店为创建的项目。
*
1.向列表中添加项目 2.更新项目清单 3.议题 4.显示项目详情 5.出口 选择:1 输入项目代码: 123 项目名称: qwerty 比率: 12345 数量: 100 1.向列表中添加项目 2.更新项目清单 3.议题 4.显示项目详情 5.出口 选择:1 输入项目代码: 1212 线程"main“中出现异常 java.util.ConcurrentModificationException地址为 java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)地址为 java.util.ArrayList$Itr.next(ArrayList.java:851)地址为 items.Shop.search(Shop.java:28) at items.Shop.addItem(Shop.java:55) 在items.ItemDemo.main(ItemDemo.java:26)
我做错什么了?(尝试提供所有相关课程)
发布于 2014-11-16 08:08:37
你是在你的列表中添加一个项目,同时迭代它。除非使用迭代器本身将新项添加到列表中,否则此操作无效。
注意,使用相同的迭代器可能是一个错误--每次调用search()方法。迭代器应该是search()方法的局部变量,而不是字段。
发布于 2014-11-16 08:27:35
在search(long code)方法中只需添加
itr = ItemList.iterator();在此之前
while(itr.hasNext()) 这是因为您在迭代器仍然指向旧列表时更改了列表。一旦在不更新迭代器的情况下添加项,就会得到并发异常。
发布于 2018-04-13 10:28:01
当我们在声明迭代器服从the之后将元素添加到列表中时,就会出现这种情况。一旦尝试将所有项目添加到列表中,然后声明迭代器对象。
https://stackoverflow.com/questions/26955041
复制相似问题