Solucionado (ver solução)
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.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software