Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

java.lang exercicio 8

public abstract class Conta {                                                                                                                           
//  private double saldo;
    protected double saldo;
    private int numero;

    public double getSaldo() {
        return this.saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
    public String toString() {    
        return "esse objeto é uma conta com saldo R$" + this.saldo;
    }   

    public boolean equals(Object obj) {
        Conta outraConta = (Conta) obj;
        return this.numero == outraConta.numero;
    }

    public int getNumero() {
        return this.numero;
    }
    public int setNumero(int numero) {
        return this.numero;
    }


    /**
     * realiza um saque na conta dado o valor passado
     * @param valor_saque valor a ser sacado
     * @return
     * @throws Exception Excption caso saldo seja insuficiente
     */
    public boolean saca(double valor_saque) throws Exception {
        if (this.saldo < valor_saque) {
            //return false;
            throw new SaldoInsuficienteException(saldo);
        }
        else {
            this.saldo = this.saldo - valor_saque;
            return true;
        }
    }

// public void deposita(double valor_dep) {//use este formato quando a classe filha de RuntimeException
     public void deposita(double valor_dep) throws ValorInvalidoException  {//use este formato quando a classe filha de Exception       
//     if (valor_dep > 0) {// neste formato utiliza a exeption do java  
//      this.saldo += valor_dep;
//     }
//     else  {
//         throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
//     }
       if (valor_dep > 0) {// neste formato utiliza a exeption pelo programador
          this.saldo += valor_dep;
         }
         else  {
             throw new ValorInvalidoException(valor_dep);
         }       
    }      

   //public void atualiza(double taxa) {                                                                                                   
   //     this.saldo += (this.saldo * taxa);                                                                                                       
   // };       
    abstract public void atualiza(double taxa);    
} 


----
package br.com.caelum.fj11.modelo;

public class ContaCorrente extends Conta implements Tributavel {

    public int ContaCorrente(int numero, String nome) {
        // TODO Auto-generated constructor stub
        return this.getNumero();
    }

    public void atualiza(double taxa) {
             this.saldo += this.saldo * taxa * 2;
      }

    @Override
    public double calculaTributos() {
        return this.getSaldo() * 0.01;
    }
}

----
package br.com.caelum.fj11.modelo;

public class TestaComparacaoConta {
    ContaCorrente cc = new ContaCorrente(6, "Leonardo");
    ContaCorrente cc2 = new ContaCorrente(6, "Leonardo");

    if (cc == cc2)
        System.out.println("mesmo objeto");
    else 
        System.out.println("outro objeto");

    if (cc.equals(cc2))
        System.out.println("objeto equivalente");
    else 
        System.out.println("objeto nao equivalente");
    }

}

meu código não esta compilando, apresenta erro na definiçlão das variaveis cc e cc2 ContaCorrente cc = new ContaCorrente(6, "Leonardo"); ContaCorrente cc2 = new ContaCorrente(6, "Leonardo");

The constructor ContaCorrente(int, String) is undefined

3 respostas

Olá Luis,

Este erro é porque você tentou criar um construtor que retorna um int. Na verdade o construtor não retorna nada, nem mesmo void. A assinatura do seu construtor deveria ser public ContaCorrente(int numero, String nome). Tem mais coisas estranhas dentro dele, veja se consegue corrigir sozinho =)

package br.com.caelum.fj11.modelo;

public class ContaCorrente extends Conta implements Tributavel {

    public ContaCorrente(int numero, String nome) {
        // TODO Auto-generated constructor stub
        return;
    }

    public void atualiza(double taxa) {
             this.saldo += this.saldo * taxa * 2;
      }

    @Override
    public double calculaTributos() {
        return this.getSaldo() * 0.01;
    }
}

----
package br.com.caelum.fj11.modelo;
import javax.management.RuntimeErrorException;

import br.com.caelum.fj11.excecao.ValorInvalidoException;

public abstract class Conta {                                                                                                                           
//  private double saldo;
    protected double saldo;
    private int numero;
    private String nome;

    public double getSaldo() {
        return this.saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
    public String toString() {    
        return "esse objeto é uma conta com saldo R$" + this.saldo;
    }   

    public boolean equals(Object obj) {
        Conta outraConta = (Conta) obj;
        return this.numero == outraConta.numero;
    }

    public int getNumero() {
        return this.numero;
    }
    public int setNumero(int numero) {
        return this.numero;
    }

    public String getNome() {
        return this.nome;
    }
    public String setNome(int nome) {
        return this.nome;
    }


    /**
     * realiza um saque na conta dado o valor passado
     * @param valor_saque valor a ser sacado
     * @return
     * @throws Exception Excption caso saldo seja insuficiente
     */
    public boolean saca(double valor_saque) throws Exception {
        if (this.saldo < valor_saque) {
            //return false;
            throw new SaldoInsuficienteException(saldo);
        }
        else {
            this.saldo = this.saldo - valor_saque;
            return true;
        }
    }

// public void deposita(double valor_dep) {//use este formato quando a classe filha de RuntimeException
     public void deposita(double valor_dep) throws ValorInvalidoException  {//use este formato quando a classe filha de Exception       
//     if (valor_dep > 0) {// neste formato utiliza a exeption do java  
//      this.saldo += valor_dep;
//     }
//     else  {
//         throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
//     }
       if (valor_dep > 0) {// neste formato utiliza a exeption pelo programador
          this.saldo += valor_dep;
         }
         else  {
             throw new ValorInvalidoException(valor_dep);
         }       
    }      

     /**
         * atualiza nome e numero de conta
         * 
         */
        public void idConta(int numero, String nome) {
            this.numero = numero;
            this.nome   = nome;

        }

   //public void atualiza(double taxa) {                                                                                                   
   //     this.saldo += (this.saldo * taxa);                                                                                                       
   // };       
    abstract public void atualiza(double taxa);

} 
--
package br.com.caelum.fj11.modelo;

public class TestaComparacaoConta {

    public static void main(String[] args) {

      ContaCorrente cc = new ContaCorrente(6, "Leonardo");
      ContaCorrente cc2 = new ContaCorrente(6, "Leonardo");

        //System.out.println(" conta 1 " + cc.getNome() + " " + cc.getNumero());
        //System.out.println(" conta 2 " + cc2.getNome() + " " + cc2.getNumero());

        if (cc == cc2)
            System.out.println("objetos são iguais");
        else 
            System.out.println("objeto são diferentes");

        if (cc.equals(cc2))
            System.out.println("objeto conta são iguas");
        else 
            System.out.println("objeto conta são diferentes");

    }
}

fiz a alteração sugerida e ocódigo compilou, porém ainda ficou uma duvida. O que estou fazendo de errado, pois se altero o numero da cc2 para 7, retorna que conta são iguais...e deveria retornar conta diferentes

objeto são diferentes objeto conta são iguas

solução!

Oi Luis, vamos lá!

Quando você instancia o objeto ContaCorrente pelo construtor dessa forma new ContaCorrente(6, "Leonardo"), passa dois parâmetros para ele. Agora olhe dentro do seu construtor, ele está assim: public ContaCorrente(int numero, String nome) { // TODO Auto-generated constructor stub return; }, Ou seja, ele nem está usando os parâmetros que você passou. Depois olhe a implementação do equals que você usou na classe Conta. Veja que o equals leva em consideração para dizer se o seu objeto é igual, apenas o atributo numero, mas se no seu construtor você não atribuiu um número os dois tem o mesmo número, por isso sempre aparecem como iguais. Tente corrigir isso e volte aqui pra contar se deu certo