Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
13
respostas

Exercicio 2 e 3 - Dúvidas

Por favor, poderiam me ajudar com as dúvidas abaixo?

Curso: Collections framework

Dúvidas:

1) No exercício 2: Resposta inicial conforme vídeo, porém alterei para a resposta do site: @Override public int compareTo(ContaPoupanca outra) { if(this.numero > outra.numero) return 1; if(this.numero < outra.numero) return -1; return 0;}

Resposta no site: @Override public int compareTo(ContaPoupanca outra) { return this.getNumero() - outra.getNumero(); } } Acredito que minha resposta inicial seja a correta. Caso não seja, por favor, poderiam me explicar? 2) Quero alterar as respostas dos exercícios deste curso, porém não aparece o campo para responder, aparece somente o botão "Responder" e "Ver Resposta". 2.1) O pacote java.io também não é possível refazer as respostas dos exercícios.

3) No exercício 3 para criar a lista está aceitando somente ContaPoupanca e não deveria aceitar Conta já que ContaPoupanca extends de Conta? Eclipse aceita List contas = new ArrayList();

Está no exercício List contas = new ArrayList();

4) Quando passa por parâmetro código e nome na criação do c1 e c2, devo criar um método na classe ContaPoupanca? Caso sim, o que terei dentro deste método? Método na Classe Conta Poupança: public ContaPoupanca(int i, String string) {

}

Obrigada.

13 respostas

Chryss,

A sua (1) está certa, bem como a resposta que demos. Faça umas simulações no papel, e você vai ver que ambas respostas devolvem negativo quando o número atual é menor que o outro, e positivo quando contrário.

sobre (3) e (4), são exercícios de quais capítulos?

Um abraço

Olá Maurício, São do mesmo capítulo. É o próximo exercício. Obrigada!

Sobre sua resposta, agora entendi. Pensei que os retornos fossem sempre 1, 0 e -1. Porém na verdade é positivo, 0 e negativo. Obrigada!

Chryss,

Se vc usa listas não-tipadas, você pode enfiar qualquer coisa dentro delas.

Se vc começar a usar listas tipadas, como List<Conta>, aí sim só poderá colocar Conta ou filhos de Conta.

Respondi?

Sim. Quero deixar somente um tipo específico. Porém o eclipse só aceita ContaPoupanca e não aceita Conta. Pelo que entendi, deveria aceitar Conta ou ContaPoupanca.

Sobre o item 4, você conseguiu entender minha dúvida? Quando o c1 é instanciado ele passa 2 parâmetros, porém a classe não está preparada para receber estes parâmetros.

Chryss,

Precisa aceitar sim. Cole o código aqui, e lembre-se de usar crase para formatar o código e facilitar a leitura.

Sobre o 4, não entendi. Onde vc viu esse construtor?

Item 3 - Vou colocar as classes Conta, ContaPoupanca, TestaOrdenacao. O erro está no sort.

Classe Conta

public class Conta{
    protected int numero;
    protected double saldo;

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

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

    public void saca(double valor){
        this.saldo -= valor;
    }

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

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

    @Override
    public String toString() {
        return "O saldo da conta é: "+ saldo;
    }

}

Classe ContaPoupanca

public class ContaPoupanca extends Conta implements Comparable<ContaPoupanca>{

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

    @Override
    public int compareTo(ContaPoupanca outra) {
        if(this.numero > outra.numero) return 1; 
        if(this.numero < outra.numero) return -1; 
        return 0;    
    }
}

Classe TestaOrdenacao

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestaOrdenacao {

    public static void main(String[] args) {
        List<Conta> contas = new ArrayList<Conta>();

        ContaPoupanca c1 = new ContaPoupanca();
        c1.deposita(1500.0);
        contas.add(c1);

        ContaPoupanca c2 = new ContaPoupanca();
        c1.deposita(1000.0);
        contas.add(c2);

        Collections.sort(contas);

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

Porém se altero a classe TestaOrdenacao de Conta para ContaPoupanca, o programa compila.

De:

List<Conta> contas = new ArrayList<Conta>();

Para:

List<ContaPoupanca> contas = new ArrayList<ContaPoupanca>();

Item 4, na resposta do exercício está assim:

public class TestaOrdenacao {

            public static void main(String[] args) {
                List<Conta> contas = new ArrayList<Conta>();

                ContaPoupanca c1 = new ContaPoupanca(400, "Caio");
                c1.deposita(1500.0);
                contas.add(c1);

                ContaPoupanca c2 = new ContaPoupanca(467, "Adriano");
                c2.deposita(2050.99);
                contas.add(c2);

                ContaPoupanca c3 = new ContaPoupanca(230, "Victor");
                c3.deposita(1070.0);
                contas.add(c3);

                Collections.sort(contas);

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

Por que na resposta do exercício 3 está passando (int, String) por parâmetro quando instancia o c1 e c2? Pois a classe Conta está declarada (int, double). Devo fazer esta alteração na classe conta?

Obrigada!

Chryss,

Entendi. O seu código não compila pq vc está invocando ali Collections.sort(conta), certo? Vc aprendeu que esse método espera que o tipo da lista implemente a interface Comparable. Mas Conta NÃO implementa!

Apesar de ContaPoupanca implementar, a lista é uma lista de conta.

Então, você tem as opções:

  • Usar lista de ContaPoupanca.

  • Fazer a classe Conta implementar Comparable.

Entendeu?

Agora sim entendi, item 3 solucionado. Muito obrigada! Obs: A resposta do exercício está fazendo no Conta e não ContaPoupanca.

Sobre o item 4?

solução!

Oi Chryss,

Pode generalizar. Instancia a classe Conta e ContaPoupanca usando os construtores que vc tem. Isso é o de menos!

Se quiser treinar, pode sim criar o novo construtor!

Um abraço!

Ok, farei isso. Como o que fiz está diferente da resposta do exercício e não tinha entendido a resposta, pensei que eu estava com conceito errado.