我有一个抽象类Usuario
和一个ArrayList<Usuario>
及其三个子类的对象。我现在想迭代 ArrayList
并根据使用 instanceof
的结果返回一个值反对那个物体。
我收到错误:java.util.NoSuchElementException
.
我想这是因为迭代器是 Iterator
的对象并且不来自 Usuario
的任何子类。我对吗?有什么解决办法吗?
public int comprobarDni(String dniAComprobar, ArrayList<Usuario> listaUsuarios) {
Iterator<Usuario> itUsuarios = listaUsuarios.iterator();
while (itUsuarios.hasNext()) {
if (dniAComprobar.equals(itUsuarios.next().getDni())) {
if (itUsuarios.next() instanceof UsuarioBiblioteca) {
return 1;
} else if (itUsuarios.next() instanceof Bibliotecario) {
return 2;
} else if (itUsuarios.next() instanceof BibliotecaExterna) {
return 3;
}
}
}
return 0;
}
最佳答案
Iterator.next()
返回下一项并前进光标。这不是你想要的,所以试试这个:
Usuario usuario = itUsuarios.next();
...
if (usuario instanceof UsuarioBiblioteca) {
return 1;
} else if (usuario instanceof Bibliotecario) {
return 2;
} else if (usuario instanceof BibliotecaExterna) {
return 3;
}
在您的代码中考虑以下情况:listaUsuarios
仅包含两个 BibliotecaExterna
类型的元素。第一次调用 next()
将返回第一个元素,但由于类型不匹配,您第二次调用 next()
会返回第二个元素。同样,类型不匹配,因此您对 next()
发出第三次调用(itUsuarios.next() instanceof BibliotecaExterna
),但没有第三个元素 因此您将得到 NoSuchElementException
。
关于Java使用instanceof和迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188584/