即使我调用 .next() 一次,也得到 java.util.NoSuchElementException
Getting a java.util.NoSuchElementException even though I call .next() once
即使我调用了 Iterator.next(),我仍然遇到 nosuchelementexception。
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);
}
}
你的第二行(while (userData.iterator().hasNext()){
)似乎每次都在检索一个新的迭代器。新迭代器可能与现有迭代器不在同一个位置,因此您总是在开始之后询问是否有元素(以一种非常低效的方式)。我怀疑正在发生的事情是您正在迭代清除列表的末尾,因为 while
条件始终为真。
您为什么不直接查询已有的迭代器 (userDataIterator.hasNext()
)?更好的是,为什么不直接使用 Java for-each loop 并完全跳过与迭代器的显式混乱呢?它基本上是您正在做的事情的语法糖,但更简洁并且没有搞砸它的风险。
即使我调用了 Iterator.next(),我仍然遇到 nosuchelementexception。
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);
}
}
你的第二行(while (userData.iterator().hasNext()){
)似乎每次都在检索一个新的迭代器。新迭代器可能与现有迭代器不在同一个位置,因此您总是在开始之后询问是否有元素(以一种非常低效的方式)。我怀疑正在发生的事情是您正在迭代清除列表的末尾,因为 while
条件始终为真。
您为什么不直接查询已有的迭代器 (userDataIterator.hasNext()
)?更好的是,为什么不直接使用 Java for-each loop 并完全跳过与迭代器的显式混乱呢?它基本上是您正在做的事情的语法糖,但更简洁并且没有搞砸它的风险。