我是Java新手,特別是遍歷列表並修改它的元素。我經歷了幾十個類似的問題,但經過多次嘗試後,沒有任何工作。 在以下代碼示例中引發了異常。它與併發線程無關,因爲我只有一個線程。在第5行出現異常Netbeans的輸出賽斯(CustomerData顧客= i.next();):另一個ConcurrentModificationException
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方法替換current元件。但仍然沒有成功,它甚至似乎從來沒有得到那麼多,因爲第5行之後出現異常......
啊!你是對的。我一直在看if-part,而不是在函數的其他部分。現在我用'i.add'替換了'addCustomer()',它的工作原理......重新審視代碼會產生奇蹟。此外,NetBeans通過告訴第5行出現異常讓我困惑。我想它將整個if-else語句算作錯誤。所有三個答案都是對的,而我在提問之前閱讀的答案都是正確的。我會將您的建議標記爲邏輯錯誤。接下來會繼續。謝謝大家! – rbx 2012-01-11 01:31:12