Problema com pesquisa!

Olá, pessoal

Quero fazer uma pesquisa usando ArrayList e estou com um problema que não estou conseguindo resolver.
Talvez alguém pode me ajudar.

Segue as classes:

ProdutoBean

public class ProdutoBean {

	private long codigo;
	private String descrição;
	
	
	
	public ProdutoBean(long codigo, String descrição) {
		super();
		this.codigo = codigo;
		this.descrição = descrição;
	}

	public long getCodigo() {
		return codigo;
	}

	public void setCodigo(long codigo) {
		this.codigo = codigo;
	}

	public String getDescrição() {
		return descrição;
	}

	public void setDescrição(String descrição) {
		this.descrição = descrição;
	}

}

Aplicacao


import java.util.ArrayList;
import java.util.Iterator;


public class Aplicacao {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ArrayList<ProdutoBean> produtos = new ArrayList<ProdutoBean>();
		ProdutoBean p1 = new ProdutoBean(1, "Chiclete");
		ProdutoBean p2 = new ProdutoBean(2, "Bala");
		
		produtos.add(p1);
		produtos.add(p2);
		
		Iterator<ProdutoBean> it = produtos.iterator();
		
		while(it.hasNext()) {
			if(it.next().getCodigo() == 2) {
				System.out.println(it.next().getCodigo());
			}
		}
		
		
	}

}

Então na hora que tento fazer a pesquisa dá o seguinte erro!

Exception in thread “main” java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at Aplicacao.main(Aplicacao.java:24)

Alguém pra me dar a luz?

Desde já agradeço

Essa exception está acontecendo porque não existe mais elementos na lista.
Quando você chama o método “it.next()” Já avança para a próxima posição. Atualmente existem 2 ProdutoBean na lista e quando você executa seu código ele tenta usar um terceiro que não existe na lista.

Iterator<ProdutoBean> it = produtos.iterator();  
while(it.hasNext()) {  
  // Na 1º iteração o método next é chamado e pega a primeira posição, mas não entra porque o código não é igual a 2. Na 2º iteração novamente chama o método next()  e pega o valor da segunda posição e o valor do código é igual a 2 e entra no if.
  if(it.next().getCodigo() == 2) {
    // Ao tentar imprimir novamente é usado o método next() e não existe uma posição 3 e acontece a exception.
    System.out.println(it.next().getCodigo());  
  }  
}  

O correto seria:

ProdutoBean aux;
while (it.hasNext()) {
  aux = it.next();
  if (aux.getCodigo() == 2) {
    System.out.println(aux.getCodigo());
  }
}

Pois estaria chamando apenas um item na lista a cada iteração.

Qualquer dúvida é só falar.

Boa sorte,

Como o amigo acima falou, vc está chamando o método next() duas vezes.

Agora eu lhe pergunto: Pq não usa o foreach?

for ( ProdutoBean pb : produtos ) { if( pb.getCodigo() == 2) { System.out.println( pb.getCodigo() ); } }

[]´s