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

OBRG ARMANO POR ME EXPLICAR! ENTENDIDO! MAS QUERIA UMA OPINIÃO SOBRE A MINHA RESPOSTA.

Olá! Segue o código com o complemento, mas gostaria, se possível, de uma explicação mais detalhada de como funciona a lógica do 'for i'. Pelo menos para a classe Podcast não entendi porque a classificação ficou com a nota 8. Qual o valor que deveria colocar no 'for i' nos métodos 'reproduz' e 'curte' e também no getTotalCurtidas para retornar a nota 10? E por último, como usar o atributo 'classificacao' da classe 'Audio'? Agradeço muito.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

package br.com.alura.minhasmusicas.modelos;
   public class Audio {
    private String titulo;
    private int totalReproducoes;
    private int totalCurtidas;
    private int classificacao;
    public String getTitulo() {return titulo; }
    public void setTitulo(String titulo) {this.titulo = titulo; }
    public int getTotalReproducoes() { return totalReproducoes;}
    public int getTotalCurtidas() {return totalCurtidas; }
    public int getClassificacao() {return classificacao; }
    public void curte(){his.totalCurtidas++;}
    public void reproduz(){this.totalReproducoes++;}}
    package br.com.alura.minhasmusicas.modelos;
    public class Podcast extends Audio{
    private  String apresentador;
    private String descricao;
    public String getApresentador() {return apresentador;}
    public void setApresentador(String apresentador) {this.apresentador = apresentador; }
    public String getDescricao() {return descricao; }
    public void setDescricao(String descricao) { this.descricao = descricao;  }
    @Override
    public int getClassificacao() {
    if (this.getTotalCurtidas() > 500){
    return 10;
    }else {
    return 8; } }}
    package br.com.alura.minhasmusicas.modelos;
    public class Musica extends Audio{
    private String album;
    private String cantor;
    private String genero;
    public String getAlbum() {return album;}
    public void setAlbum(String album) {this.album = album; }
    public String getCantor() {return cantor; }
    public void setCantor(String cantor) {this.cantor = cantor; }
    public String getGenero() {return genero;}
    public void setGenero(String genero) {this.genero = genero;}
    @Override
    public int getClassificacao() {
    if (this.getTotalReproducoes() > 2000){
    return 10;
     }else{
    return 7;}}}
    package br.com.alura.minhasmusicas.modelos;
    public class MinhasPreferidas {
    public void inclui(Audio audio){
        if (audio.getClassificacao() >= 9){
            System.out.println(audio.getTitulo() + " é considerado sucesso absoluto e preferido por todos.");
        }else{
            System.out.println(audio.getTitulo() + " também é um dos que todo mundo está curtindo."); }}}
     package br.com.alura.minhasmusicas.principal;
     import br.com.alura.minhasmusicas.modelos.MinhasPreferidas;
    import br.com.alura.minhasmusicas.modelos.Musica;
    import br.com.alura.minhasmusicas.modelos.Podcast;
    public class CCPrincipal {
    public static void main(String[] args) {
        Musica minhaMusica = new Musica();
        minhaMusica.setTitulo("Forever");
        minhaMusica.setCantor("Kiss");
        minhaMusica.setGenero("Rock");
        minhaMusica.setAlbum("Hot in the Shade");
        System.out.println("A música " + minhaMusica.getTitulo() + " de gênero " + minhaMusica.getGenero() + " da banda "  + minhaMusica.getCantor() + " faz parte do álbum " + minhaMusica.getAlbum() + " . ");
        System.out.println("Classificação: " + minhaMusica.getClassificacao());
        for (int i = 0; i < 1000; i++) {
            minhaMusica.reproduz(); }
        for (int i = 0; i < 50; i++) {
            minhaMusica.curte(); }
        Podcast meuPodcast = new Podcast();
        meuPodcast.setTitulo("BolhaDev");
        meuPodcast.setApresentador("Marcus Mendes");
        meuPodcast.setDescricao("é um diário de tecnologia, inovação e programação da Alura");
        System.out.println("O " + meuPodcast.getTitulo() + meuPodcast.getDescricao() + " apresentado por " + meuPodcast.getApresentador());
        System.out.println("Classificação: " + meuPodcast.getClassificacao());
        for (int i = 0; i < 5000; i++) {
            meuPodcast.reproduz(); }
        for (int i = 0; i < 1000; i++) {
            meuPodcast.curte();}
        MinhasPreferidas preferidas = new MinhasPreferidas();
        preferidas.inclui(meuPodcast);
        preferidas.inclui(minhaMusica); }}
5 respostas

Olá, Ana! Tudo bem?

Vamos esclarecer suas dúvidas sobre o funcionamento do código e a lógica do 'for i' nos métodos que você mencionou.

  1. Lógica do for i nos métodos reproduz e curte: os loops for que você mencionou são utilizados para simular ações repetidas, como reproduzir ou curtir um áudio várias vezes. No seu código:
  • Para a música, você utilizou:

    for (int i = 0; i < 1000; i++) {
        minhaMusica.reproduz();
    }
    for (int i = 0; i < 50; i++) {
        minhaMusica.curte();
    }
    

    Isso significa que a música foi reproduzida 1000 vezes e curtida 50 vezes.

  • Para o podcast, você utilizou:

    for (int i = 0; i < 5000; i++) {
        meuPodcast.reproduz();
    }
    for (int i = 0; i < 1000; i++) {
        meuPodcast.curte();
    }
    

    Isso faz com que o podcast seja reproduzido 5000 vezes e curtido 1000 vezes.

  1. Porque a classificação do Podcast ficou com a nota 8 e como obter a nota 10: a classificação do podcast é determinada pelo método getClassificacao sobrescrito na classe Podcast. Conforme o código:
@Override
public int getClassificacao() {
    if (this.getTotalCurtidas() > 500){
        return 10;
    } else {
        return 8;
    }
}
Para que o podcast receba a nota 10, ele precisa ter mais de 500 curtidas. No seu código, você já está dando 1000 curtidas ao podcast, o que deveria resultar em uma classificação 10. Se a classificação está aparecendo como 8, pode ser um erro em outra parte do código ou na forma como as curtidas estão sendo contadas ou exibidas.
  1. Uso do atributo classificacao da classe Audio: na classe Audio, o atributo classificacao é privado e não possui um método setClassificacao para alterá-lo diretamente. A classificação é gerenciada através do método getClassificacao, que pode ser sobrescrito nas subclasses como você fez em Podcast e Musica.

  2. Por fim, para garantir que o podcast receba uma classificação de 10, verifique se o número de curtidas está sendo incrementado corretamente e se o método getClassificacao está sendo chamado após todas as curtidas serem contadas. Não há necessidade de alterar o valor no loop for i para os métodos curte e reproduz, pois eles já estão configurados para alcançar o resultado desejado.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá Armano, obrigada pela explicação. Deixou um pouco mais claro. Mas também revendo a explicação do vídeo, a instrutora diz que o Podcast teria o incremento no Principal com "até" 5000 reproduções (< 5000) e com "até" 1000 curtidas (< 1000) como no código:

 for (int i = 0; i < 5000; i++) {
            meuPodcast.reproduz(); }
        for (int i = 0; i < 1000; i++) {
            meuPodcast.curte();}

Então, analisando o get.classificação do Podcast, tem o registro de "MAIOR QUE 500 curtidas" (> 500) como no código:

@Override
public int getClassificacao() {
    if (this.getTotalCurtidas() > 500){
        return 10;
    } else {
        return 8;
    }
}

Daí, pelo que entendi, o registro do incremento no Principal precisaria ser "ATÉ 501 curtidas" pois qualquer número a partir daí ESTÁ ACIMA DE 500 e assim então, obedece a condição estabelecida.

for (int i = 0; i < 5000; i++) {
            meuPodcast.reproduz();
        }

        for (int i = 0; i < 501; i++) {
            meuPodcast.curte();
        }

Bem, não sei se meu raciocício está certo mas ao executar o código, o resultado foi a classificação 10. MAS CASO QUEIRA ACRESCENTAR MAIS ALGUMA OBSERVAÇÃO, FIQUE A VONTADE. AFINAL, EU É QUE SOU A APRENDIZ! rsrsrsrsrsrsrsrs...

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, peço por favor a quem estiver disponível para me dar uma opinião sobre a 'solução' que eu acredito ter encontrado para o retorno que eu queria ter com o código. Apenas pra eu saber se meu raciocínio está certo ou não. Agradeço muito.

Bom dia, Ana! Peço perdão pelo retorno tardio.

Seu raciocínio está no caminho correto e como ajustou os números no código faz sentido com base nas condições fornecidas. Porém, tenho algumas observações adicionais

  • Quando você define uma estrutura de repetição assim: for (int i = 0; i < 500; i++) ela já irá rodar 500x. Porque a primeira interação será com o valor 0 e a última com o 499, totalizando assim 500 interações na estrutura de repetição, logo não seria necessário definir a estrutura assim: for (int i = 0; i < 501; i++) para serem feitas 500 curtidas, nessa caso, seriam 501.

  • É sempre importante confirmar se as condições e os números utilizados nos loops são consistentes com a lógica esperada. No seu caso, você ajustou corretamente para garantir que a classificação retornada seja 10.

Você está indo muito bem! Continuar a testar e ajustar o código é uma ótima prática para aprimorar suas habilidades de programação. Se tiver mais dúvidas ou quiser explorar outros tópicos, sinta-se à vontade para perguntar!

solução!

Ok Armano. Muito obrigada pelo feedback!