4
respostas

Erro impressão Compare

Ao imprir o código entre a lista não ordenada e a lista ordenada, por algum motivo o método compare está imprimindo uma linha: "Conta: Conta: Conta: Conta: Conta: Conta: Conta: Conta: Conta: Conta: Conta: Conta:"

package br.com.ddBank.teste.util;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import br.com.ddBank.modelos.Conta;
import br.com.ddBank.modelos.ContaCorrente;
import br.com.ddBank.modelos.ContaPoupanca;

public class TesteOrder {

    public static void main(String[] args) {
        Conta cc1  = new ContaCorrente(124, 2403);
        cc1.depositar(333.0);

        Conta cc2 = new ContaPoupanca(124, 3502);
        cc2.depositar(444.0);

        Conta cc3 = new ContaCorrente(124, 2201);
        cc3.depositar(120.0);

        Conta cc4 = new ContaPoupanca(124, 2351);
        cc4.depositar(250.0);

        List<Conta> lista = new ArrayList<>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        for (Conta conta : lista) {
            System.out.println(conta);
        }

        NumeroContaComparator comparator = new NumeroContaComparator();
        lista.sort(comparator);

        System.out.println("--------------------");

        for (Conta conta : lista) {
            System.out.println(conta);
        }



    }        
}

class NumeroContaComparator implements Comparator<Conta> {
        @Override
        public int compare(Conta c1, Conta c2) {
            return Integer.compare(c1.getNumero(), c2.getNumero());

        }
    }
4 respostas

Oie Daniel, tudo bem contigo?

Assim como no ultimo post que você fez, acredito que o problema esteja nas suas classes "Conta", "ContaPoupança" ou "ContaCorrente".

Por isso peço que você mande os códigos dessas classes para eu dar uma olhada :)

Fico no aguardo!

oi Igor. Obrigado pela ajuda. Segue as classes:

CONTA

package br.com.ddBank.modelos;

/**
 * 
 * Classe representa a moldura de uma conta
 * @author Daniel Santos
 * 
 * 
 */

//public abstract class Conta implements Comparable<Conta> 
public abstract class Conta {
    private double saldo;
    private int agencia;
    private int numero;
    private Cliente titular = new Cliente();
    private static int total;

/**
 * Construtor para inicializar o objeto conta a partir de agencia e numero
 * 
 * @param agencia
 * @param numero
 * 
 */

    public Conta (int agencia, int numero) {
        Conta.total ++;
        if(agencia <=0) {
            throw new IllegalArgumentException("Agência inválida");
        }
        this.agencia = agencia;

        if (numero <= 0) {
            throw new IllegalArgumentException("Número de conta inválido");
        }
        this.numero = numero;

    }

    public static int getTotal() {
        return Conta.total;
    }

    public void depositar (double valor) {
        this.saldo += valor;
    }    

/**
 * 
 * Valor precisa ser menor ou igual ao saldo
 * @param valor
 * @throws SacaException
 */

    public void sacar (double valor) throws SacaException {
        if(this.saldo < valor) {
            throw new SacaException("Saldo Insuficiente. Saldo = R$ " + this.saldo); 
        }
        this.saldo -= valor;
    }


    public void transferir (double valor, Conta destino) throws SacaException{
        this.sacar(valor);
        destino.depositar(valor);        
    }

    public double getSaldo() {
        return saldo;
    }

    public int getAgencia() {
        System.out.print("Agência: ");
        return agencia;
    }

    public int getNumero() {
        System.out.print("Conta: ");
        return numero;

    }
    public void setTitular(Cliente titular) {
        this.titular = titular;
    }
    public Cliente getTitular() {
        return titular;
    }

    @Override
    public boolean equals(Object ref) {

        Conta outra = (Conta) ref;

        if(this.agencia != outra.agencia) {
            return false;
        }
        if (this.numero != outra.numero) {
            return false;
    }
        return true;
    }

    @Override
    public String toString() {
        return "Agência: " + this.agencia + " - Número: " + this.numero;
    }

    @Override
    public int compareTo(Conta outra) {
        return Double.compare(this.saldo, outra.saldo);
    }

}

CONTA CORRENTE:

package br.com.ddBank.modelos;

public class ContaCorrente extends Conta implements Tributavel {

    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);
    }

    @Override
    public void sacar(double valor) throws SacaException{
        double valorSaque = valor + 0.10;
        super.sacar(valorSaque);
    }

    @Override
    public double getValorImposto() {
        return super.getSaldo() * 0.01;
    }

    @Override
    public String toString() {
        return "Conta Corrente: " + super.toString(); 
    }
}

Oie Daniel

O problema realmente está na sua classe "Conta", no "getAgencia" e no "getNumero" você colocou um "System.out.println()" e isso acaba causando essa saída estranha.

Assim é como está no momento o seu código:

   public int getAgencia() {
        System.out.print("Agência: ");
        return agencia;
    }

    public int getNumero() {
        System.out.print("Conta: ");
        return numero;

    }

Ele deve ficar assim:

 public int getAgencia() {
        return agencia;
    }

    public int getNumero() {
        return numero;

    }

Faça essa alteração e veja se resolve!

Se tiver qualquer problema estarei por aqui :)

Oi Igor! Nossa, carinha de vergonha por não ter visto. olhei esse código mil vezes e não enxerguei isso. mas me lembro que havia colocado em outra fase da formação para que a saída ficasse mais legível.

Obrigado pela ajuda.