Problema com lógica

3 respostas
pedrofelipemm

Preciso fazer um trabalho pra faculdade, construir um sistema bancário simples.
Ja esta pronto, só não estou conseguindo fazer um método para remover a conta com menor saldo.

listConta é um arraylist
public void remover() {
        double menorSaldo = 0;
        int indiceMenorSaldo = 0;
        int i = 0;

        try {
            for (i = 0; i < listConta.size(); i++) {
                if (i == 0) {
                    menorSaldo = listConta.get(i).getSaldo();
                    indiceMenorSaldo = i;

                }

                if (menorSaldo > listConta.get(i).getSaldo()) {
                    menorSaldo = listConta.get(i).getSaldo();
                    indiceMenorSaldo = i;
                }

                i++;

            }


            JOptionPane.showMessageDialog(null, "Conta número: " + listConta.get(indiceMenorSaldo).getNumeroConta()
                    + "\nNome: " + listConta.get(indiceMenorSaldo).getNome()
                    + "\nSaldo: R$" + listConta.get(indiceMenorSaldo).getSaldo()
                    + "\n   Excluida com sucesso", "Excluir", JOptionPane.INFORMATION_MESSAGE);
           listConta.remove(indiceMenorSaldo);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Não  contas cadastradas", "Erro", JOptionPane.ERROR_MESSAGE);
            System.out.println(e.getMessage());
        }
    }

Se cadastro 3 contas com saldos, 300, 400 e 500. Funciona.
Mas se cadastro 500, 400 e 300. Remove na ordem 300, 500 e 400.

Grato.

3 Respostas

sgaothaich

Tu estás incrementando o contador duas vezes, o i++ da linha 19 não é necessário.

CharlesAlves

Bom já fazendo a alteração que sgaothaich fez e ainda outra, a primeira comparação que estais fazendo é desnecessária, já que o primeiro item da lista sempre será o menor não é necessário fazer essa comparação dentro do for

public void remover() {
        double menorSaldo = 0;
        int indiceMenorSaldo = 0;
        int i = 0;

        try {
            menorSaldo = listConta.get(i).getSaldo();
            indiceMenorSaldo = i;

            for (i = 1; i < listConta.size(); i++) {


                if (menorSaldo > listConta.get(i).getSaldo()) {
                    menorSaldo = listConta.get(i).getSaldo();
                    indiceMenorSaldo = i;
                }

            }


            JOptionPane.showMessageDialog(null, "Conta número: " + listConta.get(indiceMenorSaldo).getNumeroConta()
                    + "\nNome: " + listConta.get(indiceMenorSaldo).getNome()
                    + "\nSaldo: R$" + listConta.get(indiceMenorSaldo).getSaldo()
                    + "\n   Excluida com sucesso", "Excluir", JOptionPane.INFORMATION_MESSAGE);
           listConta.remove(indiceMenorSaldo);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Não há contas cadastradas", "Erro", JOptionPane.ERROR_MESSAGE);
            System.out.println(e.getMessage());
        }
    }

pronto assim nem vai ficar pulando duas posições e fazendo comparações desnecessarias

pedrofelipemm

Thx vcs são ninjas :smiley:
Tinha feito com while, depois fiz com for e não tirei o incremento.

Criado 25 de setembro de 2011
Ultima resposta 25 de set. de 2011
Respostas 3
Participantes 3