gpt4 book ai didi

java - 另一个并发修改异常

转载 作者:行者123 更新时间:2023-11-30 04:55:02 26 4
gpt4 key购买 nike

我是 Java 新手,尤其是迭代列表和修改其元素。我遇到了几十个类似的问题,但经过多次尝试都没有效果。在下面的代码示例中,抛出了异常。它与并发线程无关,因为我只有一个线程。 Netbeans 输出显示异常发生在第 5 行(CustomerData customer = i.next();):

CustomerData tempCustomer = new CustomerData("",tagID,0);
tempCustomer.setName(name);
tempCustomer.setSize(size);
for(ListIterator<CustomerData> i = customers.listIterator(); i.hasNext(); )
{
CustomerData customer = i.next();
if(customer.getTagID().contains(tagID))
{
Object[] options = {"overwrite", "do not overwrite"};
int n = JOptionPane.showOptionDialog(rootPane,
"TagID already exists. overwrite?",
"?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
rootPane);
if ( n == JOptionPane.YES_OPTION ){
i.set(tempCustomer);
}
}
else{
addCustomer();
}
}

整个代码只应该检查元素是否具有匹配的 tagID,如果有,则替换其中的两个值(名称和大小)。最初我尝试在元素的 for 循环内使用 setName()setSize() ,但是在它不起作用并且阅读其他相关问题后,我分配了循环之前临时对象的值,并使用迭代器的 set 方法来替换当前元素。但仍然没有成功,甚至似乎永远不会走那么远,因为异常出现在第 5 行之后......

最佳答案

问题大概出在这一行:

        addCustomer();

正在尝试修改customers,而您正在迭代它。这是不允许的。

无论如何,这似乎是一个逻辑错误:假设您只想在循环之后调用 addCustomer 一次,如果没有客户拥有正确的 tagID ,但您当前的代码尝试为 每个 tagID 客户调用 addCustomer。因此,您需要在循环期间使用 boolean 变量来跟踪是否有任何客户匹配,然后在循环结束后,在适当的情况下调用 addCustomer

关于java - 另一个并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com