Erro ao consultar com Arraylist

Bom Dia

Tenho este código, que por exemplo, ao cadastrar dois produtos, ao tentar localizar pelo codigo de 1 a 100, ele retorna : “index out of bounds size:2 list:2”

public ArrayList<Produto> pesquisaCodigo(int codIni, int codFin) { ArrayList<Produto> pesquisa = new ArrayList<Produto>(); for (int x = 0; x < listaProd.size(); x++) { if ((listaProd.get(x).getCodigo() >= codIni) && (listaProd.get(x).getCodigo() <= codFin)) { pesquisa.add(listaProd.get(x)); } } return pesquisa; }

É algo errado na sintaxe?
Obrigado

public ArrayList<Produto> pesquisaCodigo(int codIni, int codFin) { ArrayList<Produto> pesquisa = new ArrayList<Produto>(); for (int x = 0; x < listaProd.size(); x++) { if ((listaProd.get(x).getCodigo() >= codIni) && (listaProd.get(x).getCodigo() <= codFin)) { pesquisa.add(listaProd.get(x)); } } return pesquisa; }

De onde você tirou isso ?

listaProd.size()

Não seria

pesquisa.size()

??

Veja se é isso mesmo.

Abraços.

cara, me parece q ta tudo certo nesse código, tem certeza que a exceção vem dessa função ae?

Talvez listaProd seja uma variável de instância da classe do manfred.
Se usar pesquisa.size(), a execução não entra no loop, pois a recem criada pesquisa não tem elementos (size é zero).
O código me parece certo; não quer postar a classe inteira?

Esta seria a Classe ( Sem comandos de cadastro etc )

[code]import java.util.ArrayList;

public class ListaProdutos {

private ArrayList listaProd = new ArrayList();

public ArrayList pesquisaCodigo(int codIni, int codFin) {
ArrayList pesquisa = new ArrayList();
for (int x = 0; x < listaProd.size(); x++) {
if ((listaProd.get(x).getCodigo() >= codIni)
&& (listaProd.get(x).getCodigo() <= codFin)) {
pesquisa.add(listaProd.get(x));
}
}

Este no programa que é inserido os valores

System.out.println("Defina o Codigo Inicial ");
					int codIni = entrada.nextInt();
					System.out.println("Defina o Codigo Final ");
					int codFin = entrada.nextInt();

					ArrayList<Produto> todosProd2 = listaProd.pesquisaCodigo(
							codIni, codFin);[/code]


E a classe produto


[code]public class Produto {

	private int codigo;

	private String descricao;

	private String fabricante;

	private double preco;

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		if (codigo > 0) {
			this.codigo = codigo;
		}
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getFabricante() {
		return fabricante;
	}

	public void setFabricante(String fabricante) {
		if (!"".equals(fabricante)) {
			this.fabricante = fabricante;
		}

	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		if (preco > 0) {
			this.preco = preco;
		}
	}

	public String toString() {
		String saida = "Código: " + this.getCodigo() + "\nDescrição: "
				+ this.getDescricao() + "\nFabricante: " + this.getFabricante()
				+ "\nPreço: " + this.getPreco();
		return saida;
	}
}
	return pesquisa;
}

}
[/code]

Ainda estou tentando , porém não obtenho sucesso.

Obrigado

[quote=patrizio.cannoni]Talvez listaProd seja uma variável de instância da classe do manfred.
Se usar pesquisa.size(), a execução não entra no loop, pois a recem criada pesquisa não tem elementos (size é zero).
O código me parece certo; não quer postar a classe inteira?
[/quote]

Tem razão cara, não tinha pensado nisso.

O problema é que temos somente o trecho do código do cara, temos que esperar ele colocar a classe inteira mesmo.

Abraços.

postado acima

[code]# System.out.println("Defina o Codigo Inicial ");

int codIni = entrada.nextInt();

System.out.println("Defina o Codigo Final ");

int codFin = entrada.nextInt();

ArrayList todosProd2 = listaProd.pesquisaCodigo(

codIni, codFin); [/code]

O que é entrada?

Observação que eu acho válida: para iterar em uma lista, utilize o seu Iterator.

public ArrayList<Produto> pesquisaCodigo(int codIni, int codFin) {  
    ArrayList<Produto> pesquisa = new ArrayList<Produto>();  
    Produto prod = null;

    for (Iterator iterator = listaProd.iterator(); iterator.hasNext();) {  
        prod = iterator.next();
      
        if ((prod.getCodigo() >= codIni)  
                && (prod.getCodigo() <= codFin)) {  
            pesquisa.add(prod);  
        }  

    }  
    
    return pesquisa;  
}  

Você pode, também, usar o novo for.

public ArrayList<Produto> pesquisaCodigo(int codIni, int codFin) {  
    ArrayList<Produto> pesquisa = new ArrayList<Produto>();  
    Produto prod = null;

    for (prod : listaProd) {  
      
        if ((prod.getCodigo() >= codIni)  
                && (prod.getCodigo() <= codFin)) {  
            pesquisa.add(prod);  
        }  

    }  
    
    return pesquisa;  
}  

Complementando o posto anterior: eu acho que, se há erro no código, o erro não está no trecho postado por você. Você já chegou a ver a linha na qual está dando o erro?

Só por curiosidade, de onde vem os códigos que você quer buscar?

Ótima observação cara.

int codIni = entrada.nextInt();
System.out.println("Defina o Codigo Final ");
int codFin = entrada.nextInt();

No caso foram cadastrados objetos na Arraylist, e assim procura os códigos deles.

o entrada é o Scanner.

Esperimenta usar o iterator da ArrayList, como postou o Felipe.

for (Iterator iterator = listaProd.iterator(); iterator.hasNext();) { prod = iterator.next();

o netbeans nao reconhece a variavel prod
importei todas as bibliotecas

[quote=manfred2k3] for (Iterator iterator = listaProd.iterator(); iterator.hasNext();) { prod = iterator.next();

o netbeans nao reconhece a variavel prod
importei todas as bibliotecas
[/quote]

A variável prod foi declarada na linha número 3 do post que eu enviei falando sobre o Iterator.

Sim, foi o que eu fiz.

O netbeans relata que são incompatíveis, e como dica ele pede a Classe Produto, não a variável prod.

Obrigado

Altere a linha 5 para:

    for (Iterator<Produto> iterator = listaProd.iterator(); iterator.hasNext();) {