To com um problema no método hasnex do meu interetor
private class HashEncIterador implements Iterator<E> {
public HashEncIterador() {
codCorrente = 0;
percorre = listaEnc[0];
}
@Override
public boolean hasNext() {
boolean boo = false;
while (codCorrente + 1 < tamanho) {
boo = false;
if (percorre != null) {
if (percorre.getProx() != null) {
boo = true;
}
} else {
codCorrente++;
percorre = listaEnc[codCorrente];
hasNext();
}
}
return boo;
}
@Override
public E next() {
if (percorre.getProx() != null) {
percorre = percorre.getProx();
return (E) percorre.getObj();
} else {
codCorrente++;
percorre = listaEnc[codCorrente];
return (E) percorre.getObj();
}
}
@Override
public void remove() {
HashEnc.this.remove((E) percorre.getObj());
}
}
Por algum motivo ele não faz recurção quando chamo ele em um determinado metodo no Main.
És o método:
private static Aluno encontra_livro(Livro livro) {
Iterator<Aluno> it = lista_aluno.iterator();
boolean achou = false;
while (it.hasNext()) {
aluno = it.next();
Iterator<Livro> itL = aluno.livro().iterator();
while (itL.hasNext()) {
Main.livro = itL.next();
if (Main.livro.getCodigo() == livro.getCodigo()) {
achou = true;
break;
}
}
if (achou) {
break;
}
}
if (achou) {
return aluno;
} else {
return null;
}
}
Mais nesse, por exemplo, funciona sem problema:
private static void Consultar_livro() {
try {
Keyboard.clrscr();
int cod = Keyboard.readInt("Informe o codigo do livro:");
livro = new Livro(cod);
if (lista_livro.contains(livro)) {
livro = lista_livro.retrieve(livro);
System.out.println("Codigo:" + livro.getCodigo() + " Nome:" + livro.getTitulo_livro());
System.out.println("---------------------------------");
System.out.println("codigo Nome");
System.out.println("---------------------------------");
Iterator<Aluno> it = lista_aluno.iterator();
while (it.hasNext()) {
aluno = it.next();
Iterator<Livro> itL = aluno.livro().iterator();
while (itL.hasNext()) {
livro = itL.next();
if (livro.getCodigo() == cod) {
System.out.printf("%6d %10s\n", aluno.getMatricula() , aluno.getNome());
}
}
}
} else {
System.out.println("Livro não encontrado");
}
} catch (Exception e) {
}
Keyboard.waitEnter();
}
Se alguem souber o motivo do método hasNext não entrar em recurção, fala aê