获取java.util.NoSuchElementException,即使我调用了一次.next()

获取java.util.NoSuchElementException,即使我调用了一次.next(),java,nosuchelementexception,Java,Nosuchelementexception,尽管我调用了Iterator.next(),但仍然存在NoTouchElementException ListIterator<BankAccount_4> userDataIterator = userData.listIterator(); while (userData.iterator().hasNext()){ BankAccount_4 bankAccount4 = u

尽管我调用了Iterator.next(),但仍然存在NoTouchElementException

ListIterator<BankAccount_4> userDataIterator = userData.listIterator();
                        while (userData.iterator().hasNext()){
                            BankAccount_4 bankAccount4 = userDataIterator.next();
                           if (bankAccount4.getAccountNum()!=bankAccount_4.getAccountNum()) {
                               userDataIterator.add(bankAccount_4);
                               String fileName = bankAccount4.getAccountNum() + " - " + bankAccount4.getCustomerAccName() + "'s Account details";
                               dataPersistency(displayAccount(bankAccount4) + "\n\n" + computeInterest(bankAccount4), fileName);
                           }
                       }
ListIterator userDataIterator=userData.ListIterator();
while(userData.iterator().hasNext()){
BankAccount_4 bankAccount4=userDataIterator.next();
如果(bankAccount4.getAccountNum()!=bankAccount_4.getAccountNum()){
userDataIterator.add(bankAccount_4);
字符串文件名=bankAccount4.getAccountNum()+“-”+bankAccount4.getCustomerAccName()+“'的帐户详细信息”;
数据持久性(displayAccount(bankAccount4)+“\n\n”+computeInterest(bankAccount4),文件名);
}
}
您的第二行(
while(userData.iterator().hasNext()){
)似乎每次都在检索一个新的迭代器。新的迭代器可能与现有的迭代器不在同一个位置,因此您总是询问在开始之后是否有一个元素(以一种非常低效的方式).我怀疑发生的是,您正在迭代清除列表的末尾,因为
while
条件始终为真

为什么不直接查询已有的迭代器(
userDataIterator.hasNext()
)?更好的是,为什么不直接使用a并跳过与迭代器的明显混淆?它基本上是对您所做工作的语法补充,但更简洁,而且不会有把它搞砸的风险。

您的第二行(
while)(userData.iterator().hasNext()){
)似乎每次都在检索一个新的迭代器。新的迭代器可能与现有的迭代器不在同一个位置,因此您总是询问在开始之后是否有元素(以一种非常低效的方式).我怀疑发生的是,您正在迭代清除列表的末尾,因为
while
条件始终为真

为什么不直接查询已有的迭代器(
userDataIterator.hasNext()
)?更妙的是,为什么不直接使用一个,直接跳过迭代器呢?它基本上是你所做事情的语法糖分,但更简洁,而且不会有把事情搞砸的风险