Interator - hasNext

0 respostas
J

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ê

Criado 11 de setembro de 2010
Respostas 0
Participantes 1