Erro ao consultar com Arraylist

18 respostas
manfred2k3

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

18 Respostas

fabio.nascimento

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.

quikkoo

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

P

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?

manfred2k3

Esta seria a Classe ( Sem comandos de cadastro etc )

import java.util.ArrayList;

public class ListaProdutos {

private ArrayList<Produto> listaProd = new ArrayList<Produto>();

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));
			}
		}

Este no programa que é inserido os valores
[code]
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);

E a classe produto

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

fabio.nascimento

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?

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.

manfred2k3

postado acima

P
# 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);

O que é entrada?

felipealbuquerque

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;  
}
felipealbuquerque

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?

sublyer

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

P

Ótima observação cara.

manfred2k3
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.

manfred2k3

o entrada é o Scanner.

P

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

manfred2k3

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

o netbeans nao reconhece a variavel prod
importei todas as bibliotecas

felipealbuquerque

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

o netbeans nao reconhece a variavel prod
importei todas as bibliotecas

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

manfred2k3

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

felipealbuquerque

Altere a linha 5 para:

for (Iterator<Produto> iterator = listaProd.iterator(); iterator.hasNext();) {
Criado 22 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 18
Participantes 6