gpt4 book ai didi

Java使用instanceof和迭代器

转载 作者:行者123 更新时间:2023-12-01 07:50:43 26 4
gpt4 key购买 nike

我有一个抽象类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/

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