Sou*_*aji 1 java exception arraylist
问题陈述:为以下场景设计系统:
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)
Run Code Online (Sandbox Code Playgroud)
现在我创建了一个Shop类来访问Item类,对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");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我添加一个新项目时,它的工作原理..但是当我添加第二个元素时,它会抛出一个
ConcurrentModificationException的
以下是示例输出:已
创建项目的新商店.
*
-----项目------
1.添加项目到列表
2.更新项目列表
3.问题项目
4.显示项目详细信息
5.退出
选择:1
输入项目代码:123
项目名称:qwerty
评分:12345
数量:100
1.将项目添加到列表
2.更新项目列表
3.发布项目
4.显示项目详细信息
5.退出
选择:1
输入项目代码:1212 java.util
中线程"main"
java.util.ConcurrentModificationException
中的异常.
java.util.ArrayList中的ArrayList $ Itr.checkForComodification(ArrayList.java:901)$ items.hop.(Ed.Alxt(ArrayList.java:851)at
items.Shop.search(Shop.java:28)items.Shop.addItem(Shop .java:55)
at items.ItemDemo.main(ItemDemo.java:26)
我究竟做错了什么?(试图给所有相关课程)
在search(long code)方法中只需添加
itr = ItemList.iterator();
Run Code Online (Sandbox Code Playgroud)
前
while(itr.hasNext())
Run Code Online (Sandbox Code Playgroud)
这是因为您更改了列表,而迭代器仍然指向旧列表。一旦添加项目而不更新迭代器,您将收到并发异常。
| 归档时间: |
|
| 查看次数: |
11224 次 |
| 最近记录: |