ArrayList

15 respostas
S

Galera tenho um arraylist com valores float, exemplo: 55.67, 67.98, 89.10, etc…

Preciso pegar o menor valor desse arraylist, como posso fazer ?

Obrigado

15 Respostas

juninhoall

Ordene ele e pegue o a posição de numero zero

Segue um exemplo

package arrayordenacao;

import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * @author Luiz Almeida Júnior
 */
public class ArrayOrdenacao {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // o array suporta n posições 
        float arrayOrdenar[] = new float[5];
        for (int index = 0; index < arrayOrdenar.length; index++) {
            System.out.print("Informe o " + (index + 1) + "º termo.:");
            arrayOrdenar[index] = input.nextFloat();
        }

        Arrays.sort(arrayOrdenar, 0, arrayOrdenar.length);
        System.out.println("\nArray ordenado.....: " + Arrays.toString(arrayOrdenar));
        System.out.println("O menor termo é....: " + arrayOrdenar[0]);

    }
}

[Editado.: mudei o vetor para float, não tinha lido o enunciado direito e deixei o array int, peço perdão pelo descuido. ]

S

Cara desculpa eu não entendi muito bem, meu método está assim :

public String exibirContaEconomica()
    {
        String saida= "";
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                ........
            }
        }
        
        return saida;
    }

Como ficaria dentro do FOR ?

Obrigado

ViniGodoy

Nossa, exercício básico que se dá na primeira aula aula de for.

float menorValorConta = FLOAT.MAX_VALUE;
float ContaEnergia menorConta = null;

for (ContaEnergia obj : arrayContaEnergia) {  
    if (obj.getValor() &lt; menorValorConta) {
         menorValorConta = obj.getValor();
         menorConta = obj;
    }
}

Se for em Java 8, e se ContaEnergia for comparable, há um jeito bem mais fácil:

ContaEnergia menor = arrayContaEnergia
    .stream()
    .min(ContaEnergia::compare)
    .get();
Se não for comparable, basta colocar um Comparator dentro do método min:
ContaEnergia menor = arrayContaEnergia
    .stream()
    .min((e1, e2) -> (int)((e1.getValor() - e2.getValor()) * 100))
    .get();
juninhoall

SirSmart:
Cara desculpa eu não entendi muito bem, meu método está assim :

public String exibirContaEconomica()
    {
        String saida= "";
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                ........
            }
        }
        
        return saida;
    }

Como ficaria dentro do FOR ?

Obrigado

Suponhamos que você tenha um array com os números 23,22 - 1,1 - 0,2 , ordenados ficaram 0,2 - 1,1 - 23,22 . Concorda comigo ?
e o menor ficara na posição 0 do array, correto ? se imprimir essa posição após ordenado terá o menor valor em tela.
Qualquer outra dúvida basta mandar uma MP, estarei ajudando na medida que eu souber.

S

Entendi, mas não consigo fazer isso :

arrayContaEnergiaa.sort(arrayContaEnergia);

Pq?

Abraço

juninhoall

SirSmart:
Entendi, mas não consigo fazer isso :

arrayContaEnergiaa.sort(arrayContaEnergia);

Pq?

Abraço

/* Segue a implementação 
 Vale ressaltar que estava faltando dois parametros sendo, 0 "Posição inicial" e "arrayContaEnergia.length" posição final, espero ter ajudado */
arrayContaEnergiaa.sort(arrayContaEnergia, 0 , arrayContaEnergia.length);
S

Cara não tenho a opção length no meu arrayList, só tenho size() e está ocorrendo erro.
Desculpa mas ainda não consegui resolver, se vc puder me ajudar eu agradeço

Abraço

A

SirSmart:
Cara não tenho a opção length no meu arrayList, só tenho size() e está ocorrendo erro.
Desculpa mas ainda não consegui resolver, se vc puder me ajudar eu agradeço

Abraço

ViniGodoy já lhe deu a resposta…
Mesmo assim mostre o seu código para a gente ver …
até…

juninhoall

SirSmart:
Entendi, mas não consigo fazer isso :

arrayContaEnergiaa.sort(arrayContaEnergia);

// deve se inportar o pacote Arrays
import java.util.Arrays; 

Arrays.sort(arrayContaEnergia, 0 ,arrayContaEnergia.length );
ViniGodoy

juninhohall, ele está usando ArrayList e não Arrays primitivos.

SirSmart, qual é o problema com a resposta que te passei?

S

Cara desculpa mas como sou muito novo em java não sei muito bem fazer a comparação e acabei não entendendo a maneira que vc fez. Vou postar minha classe e como estou fazendo e se vc puder me ajudar eu agradeço.

Segue:

package maisenergia;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import javax.swing.JOptionPane;

public class GerenciaContasEnergia  {
    
    ArrayList<ContaEnergia> arrayContaEnergia;
 
    public GerenciaContasEnergia()
    {
        arrayContaEnergia = new ArrayList();
    }

    public void adicionarContaEnergia(ContaEnergia conta)
    {
        arrayContaEnergia.add(conta);
    }
    
    public ContaEnergia buscarContaEnergia(int contaEnergia)
    {
        ContaEnergia conta = new ContaEnergia();
        
        for (ContaEnergia obj : arrayContaEnergia) 
        {
            if(obj.getNumeroConta() ==  contaEnergia)
            {
                    //return obj;
                conta.setNomeEndereco(obj.getNomeEndereco());
                conta.setNumeroConta(obj.getNumeroConta());
                conta.setQtdeKWConsumidos(obj.getQtdeKWConsumidos());
                conta.setValorKWUnitario(obj.getValorKWUnitario());
            }
        }
        return conta;
    }
    
    public String listarTodas()
    {
        String saida= "";
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                saida += obj.Imprimir() + "\n";
            }
        }
        return saida;
    }
    
    public String exibirContaEconomica()
    {
        String saida= "";

        if(arrayContaEnergia.isEmpty())
        {
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
               .....
            }
        }
        return saida;
    }
        

    public float exibirConsumoMedioKw()
    {
        String saida= "";
        float total = 0;
        float totalMedia=0;
        
        ContaEnergia conta = new ContaEnergia();
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                total+= obj.getQtdeKWConsumidos();
            }
            
            totalMedia = total /  arrayContaEnergia.size();

        }
        return totalMedia;
    }
    
}

No método “exibirContaEconomica” preciso exibir o menor valor que o usuário cadastrou no arraylist que fui preechendo e como disse até agora não consegui fazer…

Obrigado

juninhoall

SirSmart:
Cara desculpa mas como sou muito novo em java não sei muito bem fazer a comparação e acabei não entendendo a maneira que vc fez. Vou postar minha classe e como estou fazendo e se vc puder me ajudar eu agradeço.

Segue:

package maisenergia;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import javax.swing.JOptionPane;

public class GerenciaContasEnergia  {
    
    ArrayList<ContaEnergia> arrayContaEnergia;
 
    public GerenciaContasEnergia()
    {
        arrayContaEnergia = new ArrayList();
    }

    public void adicionarContaEnergia(ContaEnergia conta)
    {
        arrayContaEnergia.add(conta);
    }
    
    public ContaEnergia buscarContaEnergia(int contaEnergia)
    {
        ContaEnergia conta = new ContaEnergia();
        
        for (ContaEnergia obj : arrayContaEnergia) 
        {
            if(obj.getNumeroConta() ==  contaEnergia)
            {
                    //return obj;
                conta.setNomeEndereco(obj.getNomeEndereco());
                conta.setNumeroConta(obj.getNumeroConta());
                conta.setQtdeKWConsumidos(obj.getQtdeKWConsumidos());
                conta.setValorKWUnitario(obj.getValorKWUnitario());
            }
        }
        return conta;
    }
    
    public String listarTodas()
    {
        String saida= "";
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                saida += obj.Imprimir() + "\n";
            }
        }
        return saida;
    }
    
    public String exibirContaEconomica()
    {
        String saida= "";

        if(arrayContaEnergia.isEmpty())
        {
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
               .....
            }
        }
        return saida;
    }
        

    public float exibirConsumoMedioKw()
    {
        String saida= "";
        float total = 0;
        float totalMedia=0;
        
        ContaEnergia conta = new ContaEnergia();
        
        if(arrayContaEnergia.isEmpty()){
            JOptionPane.showMessageDialog(null, "Nenhuma conta cadastrada!!");
        }
        else
        {
            for (ContaEnergia obj : arrayContaEnergia) 
            {
                total+= obj.getQtdeKWConsumidos();
            }
            
            totalMedia = total /  arrayContaEnergia.size();

        }
        return totalMedia;
    }
    
}

No método “exibirContaEconomica” preciso exibir o menor valor que o usuário cadastrou no arraylist que fui preechendo e como disse até agora não consegui fazer…

Obrigado

Tem como passar apenas o enunciado do exercicio ?

S

O enunciado do exercício é esse:

Criar a Classe GerenciaContasEnergia que tenha um atributo ArrayList do tipo ContaEnergia. Os seguintes métodos devem ser implementados:

adicionarContaEnergia(): adicionar uma conta de energia na lista.
buscarContaEnergia(int numero): buscar uma conta de energia pelo número da Conta. Este método deve retornar um objeto ContaEnergia.
listarTodas(): visualizar todos as contas de energia da lista. Este método deve retornar uma String. Fazer validação para lista vazia.
exibirContaEconomica(): exibir nome do cliente e quantidade KW consumidos da conta de energia mais econômica. Fazer validação para lista vazia.
exibirConsumoMedioKw(): exibir o consumo médio de KW de todas as contas armazenadas na lista. Fazer validação para lista vazia.

No caso o método é exibirContaEconomica

Abraço

A

Espero que ajude.. deve ser isso mais ou menos.. rs

Classe ContaEnergia
public class ContaEnergia {
    
    private int numero;
    private String nome;
    private String endereco;
    private float qtdeKW;
    private float valorKW;
    
    public ContaEnergia() {
        
    }
    
    public String imprimir(ContaEnergia conta) {
        return new StringBuilder()
                .append("\nNome: ").append(conta.getNome())
                .append("\nNumero da Conta: ").append(conta.getNumero())
                .append("\nEndereço: ").append(conta.getEndereco())
                .append("\nQuantidade de KW: ").append(conta.getQtdeKW())
                .append("\nValor KW: ").append(conta.getValorKW())
                .append("\n\n").toString();
    }    

    // ----------------- Getters e Setters ---------------- //
    
    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public float getQtdeKW() {
        return qtdeKW;
    }

    public void setQtdeKW(float qtdeKW) {
        this.qtdeKW = qtdeKW;
    }

    public float getValorKW() {
        return valorKW;
    }

    public void setValorKW(float valorKW) {
        this.valorKW = valorKW;
    }  
}
Classe GerenciaContasEnergia
public class GerenciaContasEnergia {
    
    private List<ContaEnergia> contaEnergia = null;
    
    public GerenciaContasEnergia() {
        this.contaEnergia = new ArrayList<>();
    }
    
    public void adicionarContaEnergia(ContaEnergia conta) {
        contaEnergia.add(conta);
    }
    
    public ContaEnergia buscarContaEnergia(int numero) {
        ContaEnergia conta = null;
        for(ContaEnergia c : contaEnergia){
            if(c.getNumero() == numero){
                conta = c;                
            }            
        }        
        return conta;
    }
    
    public String listarTodas() {
        String list = "";
        for(ContaEnergia c : contaEnergia){
            list = new StringBuilder(list).append(c.imprimir(c)).toString();
        }
        return contaEnergia.isEmpty() ? "Lista vazia !!" : list;
    }
    
    public String exibirContaEconomica() {
        float menorValorConta = Float.MAX_VALUE;        
        ContaEnergia menorConta = null;
        for(ContaEnergia c : contaEnergia){
            if(c.getValorKW() < menorValorConta){
                menorValorConta = c.getValorKW();
                menorConta = c;
            }
        }                       
        return contaEnergia.isEmpty() ? "Lista Vazia !!" : dadosCliente(menorConta);
    }
    
    public String exibirConsumoMedioKw() {
        float soma = 0.0f;
        for(ContaEnergia c : contaEnergia){
            soma += c.getValorKW();
        }
        return contaEnergia.isEmpty() ? "Lista Vazia !!" :
               String.valueOf(soma / contaEnergia.size());        
    }
    
    private String dadosCliente(ContaEnergia conta) {
        return new StringBuilder().append("Nome: " ).append(conta.getNome())
               .append("\nNúmero da Conta: ").append(conta.getNumero())
               .append("\nQuantidade Consumida: ").append(conta.getQtdeKW()).toString();
    }
}
Classe TesteConta -- Exemplo
public class TesteConta {
    
    public static void main(String[] args) {
        GerenciaContasEnergia gerConta = new GerenciaContasEnergia();
        ContaEnergia nConta1, nConta2;
        nConta1 = new ContaEnergia();
        nConta2 = new ContaEnergia();
        //Cadastra conta 1
        nConta1.setNome("Carla");
        nConta1.setEndereco("Rua Miranda");
        nConta1.setNumero(2);
        nConta1.setQtdeKW(53);
        nConta1.setValorKW(34.95f);
        gerConta.adicionarContaEnergia(nConta1);
        //Cadastra conta 2
        nConta2.setNome("Rafael");
        nConta2.setEndereco("Rua Pereira");
        nConta2.setNumero(5);
        nConta2.setQtdeKW(145);
        nConta2.setValorKW(69.89f);
        gerConta.adicionarContaEnergia(nConta2);        
        //Exibe todas as Listas
        System.out.println("----- Lista de Cadastrados ----");
        System.out.print(gerConta.listarTodas());
        //Exibe a menor Conta
        System.out.println("---- Conta mais Economica -----\n");
        System.out.print(gerConta.exibirContaEconomica());
        //Exibe a média das Contas
        System.out.println("\n\n---- Consumo Médio -----\n");
        System.out.print("Consumo Médio de: " + gerConta.exibirConsumoMedioKw());                
        //Exibe resultado da Busca 
        System.out.println("\n\n---- Buscar Cliente -----");       
        resultBusca(gerConta, 5);
    }    
    
    private static void resultBusca(GerenciaContasEnergia cliente, int numero) {
        ContaEnergia cliEnergia = cliente.buscarContaEnergia(numero);        
        if(cliEnergia == null){
            System.out.print("\nCliente não cadastrado !!");                          
        }else{
            System.out.println(cliEnergia.imprimir(cliEnergia));
        }
    }
}
Faça o teste.. até
S

Galera muito obrigado pela ajuda, agora deu certo…

Abraço a todos pela ajuda…

Criado 8 de maio de 2014
Ultima resposta 11 de mai. de 2014
Respostas 15
Participantes 4