Como fazer uma classificação em uma lista

10 respostas
M

boa noite galera......

estou com um grande problema, estou precisando deixar minha lista de produtos classificados pelo preço, mas não consigo fazer de geito nenhum, alguem pode me dar uma ajuda??? e mo mostrar um exemplo.......

import java.io.BufferedReader;
import java.io.FileNotFoundException;   
import java.io.FileReader;   
import java.io.IOException;   
import java.util.ArrayList;   
import java.util.Collections;
import java.util.List;   
import java.util.StringTokenizer;

public class LeProdutos
{
    private static List<Produto> produtos = new ArrayList<Produto>();

    public static void main(String[] args)
    {
        try
        {
            //abre o arquivo
            FileReader fr = new FileReader("lista.txt");
            BufferedReader br = new BufferedReader(fr);
            String temp;
  
            Produto produto = null;
            //A cada interação, é uma linha do arquivo e atribui-a a temp
            while ((temp = br.readLine()) != null)
            {
                //Aqui gera a sua "lista". No caso, imprimi cada linha na tela.
                String[] a = temp.split(";");
                // a[] = {produto, descricao, preco}
                produto = new Produto(a[0], a[1], (a[2]));
                produtos.add(produto);
                produto.mostra(produto);
            }
        }
        catch (FileNotFoundException e)
        {
            System.out.println("Arquivo não Encontrado!");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
class Produto
{
    private String codigo;
    private String descricao;
    private double preco;

    public Produto(String codigo, String descricao, String preco)
    {
        this.codigo = codigo;
        this.descricao = descricao;
        this.preco = Double.parseDouble(preco);
    }
    public void mostra(Produto produto)
    {
    	System.out.println("codigo \t" + codigo + "\tDescricao " + descricao + "\t\t Preço " + preco);
    }
    
    public void classifica()
    {
    	
    }
}

10 Respostas

M

eu tenho esse modelo…
mas não consegui colocar nesse algorito.

public void classifica() { int fora, dentro; for(fora=nElems-1;fora>0;fora--) for(dentro=0;dentro<fora;dentro++) if(vetor[dentro]>vetor[dentro+1]){ int temp=vetor[dentro]; vetor[dentro]=vetor[dentro+1]; vetor[dentro+1]=temp;} }

V
class Produto implements Comparable<Produto> 
{   
    private String codigo;   
    private String descricao;   
    private double preco;   
  
    public Produto(String codigo, String descricao, String preco)   
    {   
        this.codigo = codigo;   
        this.descricao = descricao;   
        this.preco = Double.parseDouble(preco);   
    }   

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

    public double getPreco() {
        return preco;
    }

    public void mostra(Produto produto)   
    {   
        System.out.println("codigo \t" + codigo + "\tDescricao " + descricao + "\t\t Preço " + preco);   
    }   
       
    public int compareTo(Produto o)   
    {   
           return new Double(o.getPreco).compareTo(getPreco());
    }
}

Para ordenar

List<Produto> lista = new ArrayList<Produto>();
lista.add(produto1);
lista.add(produto2);
.....

Collections.sort(lista); //lista ficar ordenada conforme metodo compareTo
M

ok, mas na ordenação vc ta inserindo um produto de cada vez…
creio q não está de acordo com minha lógica, pois eu preciso pegar o a[2], pois é nele que o preço está inserido, e assim consecutivamente…

não seria isso???

não entendi sua lógica…

M

galera, alguem pode me ajudar, estou precisando urgente de uma solução…

V

No seu while vc tbm insere um produto por vez, apos o while terminar vc executa
Collections.sort(produtos);

Dai se vc rodar um for em produtos vc vera q estara ordenado por preco.

M

blz eu fiz isso
mas está gerando esse erro, e não consegui sanar…

Bound mismatch: The generic method sort(List) of type Collections is not applicable for the
arguments (List). The inferred type Produto is not a valid substitute for the bounded
parameter <T extends Comparable<? super T>>

M

[b]será que alguem poderia me dar um exemplo… fica dando esse erro doido… não consigo resolver…

alguem pode me ajudar???[/b]

V

Voce implementou comparable na sua classe Produto ?

M

sim, implementei, do geito que vc fez…

M

galera, alguem pode me dar uma ajuda, ninguem sabe sobre o assunto???

Criado 31 de maio de 2008
Ultima resposta 3 de jun. de 2008
Respostas 10
Participantes 2