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

Artista aparecendo com o nome "Banda" e Album com 0 segundos

Quando eu executo o ExibirFichaTecnica() da musica, aparece "Artista: Banda" mas eu inseri o nome de banda como "Resgate". E ao executar o ExibirDiscografia() da Banda está aparecendo duração de 0 segundos sendo que eu ja havia inserido duas músicas no Album. O que eu fiz me errado? Alguém me ajuda por favor.

BANDA.CS


class Banda
{
    private List<Album> albums = new List<Album>();
    public string Nome { get; set; }


    public void AdicionarAlbum(Album album)
    {
        albums.Add(album);
    }

    public void ExibirDiscografia()
    {
        Console.WriteLine($"Discografia da banda {Nome}");
        foreach (Album album in albums)
        {
            Console.WriteLine($"Album: {album.Nome} ({album.DuracaoTotal}s)");
        }
    }
}

MUSICA.CS

class Musica
{
    public Musica(Banda artista)
    {
        Artista = artista;
    }
    public string Nome { get; set; }
    public Banda Artista { get; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }

    public string DescricaoResumida => 
         $" A música {Nome} pertence a banda {Artista}";


    public Genero Genero { get; set; }


    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Duracao: {Duracao}");
        Console.WriteLine($"Gênero: {Genero.Nome}");

        if (Disponivel)
        {
            Console.WriteLine("Música disponível no plano");
        } else
        {
            Console.WriteLine("Adquira o plano Plus+ para ouvir esta música");
        }
    }

    public void ExibirNomeArtista()
    {
        Console.WriteLine($"Nome do artista da musica {Nome} é {Artista}");
    }

}

ALBUM.CS

class Album
{
    //atributo (CamelCase)
    private List<Musica> musicas = new List<Musica>();

    //propriedade (PascalCase)
    public string Nome { get; set; }

    //---------------------------------Somar(para cada musica(m) pegar a duracao.)
    public int DuracaoTotal => musicas.Sum(m => m.Duracao);

    //método - comportamento
    public void AdicionarMusica(Musica musica)
    {
        musicas.Add(musica);
    }

    public void ExibirMusicasDoAlbum()
    {
        Console.WriteLine($"Lista de músicas do album {Nome}\n");
        foreach (var musica in musicas)
        {
            Console.WriteLine($"Música: { musica.Nome}");
        }
        Console.WriteLine($"\nPara ouvir este album inteiro você precisa de {DuracaoTotal} segundos");
        
    }
}

PROGRAM.CS

//cria album novo (instancia album)
Album albumResgate = new Album();
albumResgate.Nome = "Ainda não é o ultimo";

//cria banda
Banda banda1 = new Banda();
banda1.Nome = "Resgate";
banda1.AdicionarAlbum(albumResgate);
banda1.ExibirDiscografia();

//cria musicas
Musica musica1 = new Musica(banda1);
musica1.Nome = "Transformers";
musica1.Duracao = 237;
musica1.Genero = new Genero();
musica1.Genero.Nome = "Rock";


musica1.ExibirFichaTecnica();


Musica musica2 = new Musica(banda1);
musica2.Nome = "O Vesúvio";
musica2.Duracao = 355;
//musica2.Genero.Nome = "Rock";
//musica2.Disponivel = true;



//adiciona musicas ao album
albumResgate.AdicionarMusica(musica1);
albumResgate.AdicionarMusica(musica2);

albumResgate.ExibirMusicasDoAlbum();



3 respostas

Boa Noite! No seu caso Artista é do tipo Banda " public Banda Artista { get; }" Se você quer exibir o nome do Artista tem que colocar Artista.Nome por exemplo

O metodo ficaria assim por exemplo:

public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista.Nome}");
        Console.WriteLine($"Duracao: {Duracao}");
        Console.WriteLine($"Gênero: {Genero.Nome}");

        if (Disponivel)
        {
            Console.WriteLine("Música disponível no plano");
        } else
        {
            Console.WriteLine("Adquira o plano Plus+ para ouvir esta música");
        }
    }

Obrigada! E a questão dos 0 segundos?

solução!

Devido a ordem dos dados. Quando vc manda exibir o banda1.ExibirDiscografia(); Antes de inserir musicas ao album, por isso ele aparece como "0".