3
respostas

O que tem de errado nesses 3 códigos?

Album: class Album { private List musicas = new List(); public string Nome { get; set; } public int DuracaoTotal { get; set; }

public void AdicionarMusica(Musica musica)
{
    musicas.Add(musica);
}
public void ExibirMusicasDoAlbum()
{
    Console.WriteLine($"Lista de musicas do álbum {Nome}:\n");
    foreach (var musica in musicas)
    {
        Console.WriteLine($"Música: {musica.Nome}");
    } 
   
}

}

**Musica:**
class Album

{ private List musicas = new List(); public string Nome { get; set; } public int DuracaoTotal { get; set; }

public void AdicionarMusica(Musica musica)
{
    musicas.Add(musica);
}
public void ExibirMusicasDoAlbum()
{
    Console.WriteLine($"Lista de musicas do álbum {Nome}:\n");
    foreach (var musica in musicas)
    {
        Console.WriteLine($"Música: {musica.Nome}");
    } 
   
}

}

**Program:**
class Album

{ private List musicas = new List(); public string Nome { get; set; } public int DuracaoTotal { get; set; }

public void AdicionarMusica(Musica musica)
{
    musicas.Add(musica);
}
public void ExibirMusicasDoAlbum()
{
    Console.WriteLine($"Lista de musicas do álbum {Nome}:\n");
    foreach (var musica in musicas)
    {
        Console.WriteLine($"Música: {musica.Nome}");
    } 
   
}

}

3 respostas

Oi Vinícius! Como vai?

Vamos tentar identificar o que pode estar errado ou faltando com base no contexto.

  1. Classe Musica ausente: Para que o código funcione, você precisa de uma classe Musica que tenha pelo menos as propriedades Nome e Duracao. Algo assim:

    class Musica
    {
        public string Nome { get; set; }
        public int Duracao { get; set; }
    }
    
  2. Repetição da classe Album: Certifique-se de que cada arquivo ou seção do código que você compartilhou está implementando a classe correta. Parece que a classe Album foi copiada três vezes. Você deve ter uma classe Album, uma classe Musica e um arquivo Program.cs para executar o programa.

  3. Arquivo Program.cs: No arquivo Program.cs, você deve criar instâncias de Album e Musica, adicionar músicas ao álbum e, em seguida, chamar o método ExibirMusicasDoAlbum(). Aqui está um exemplo de como isso poderia ser feito:

    class Program
    {
        static void Main(string[] args)
        {
            Album albumDoQueen = new Album { Nome = "A night at the opera" };
            Musica musica1 = new Musica { Nome = "Love of my life", Duracao = 213 };
            Musica musica2 = new Musica { Nome = "Bohemian Rhapsody", Duracao = 354 };
    
            albumDoQueen.AdicionarMusica(musica1);
            albumDoQueen.AdicionarMusica(musica2);
    
            albumDoQueen.ExibirMusicasDoAlbum();
        }
    }
    

Verifique se você tem a classe Musica implementada e se o arquivo Program.cs está configurado para criar e manipular instâncias das classes Album e Musica.

Espero ter ajudado e bons estudos!

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

Ainda tem algo errado nesse código:

class Musica
{
    public string Nome { get; set; }
    public string Artista { get; set; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    public string DescricaoResumida = $"A música {Nome} pertence à banda: {Artista}";

    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista {Artista}");
        Console.WriteLine($"Duração: {Duracao}");
        if (Disponivel)
        {
            Console.WriteLine($"Disponivel no plano: {Disponivel}");
        }
        else
        {
            Console.WriteLine("Adquira o plano plus+");
        }
    }
}

Olá, Vinícius! Tudo bem?

Você está correto, há um erro no código. O problema está na seguinte linha:

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

A propriedade DescricaoResumida está sendo inicializada com uma interpolação de string ($"..."), que depende de outras propriedades da classe (Nome e Artista). No entanto, no momento em que a classe é instanciada, essas propriedades ainda não foram definidas, o que pode levar a null.

Uma solução seria transformar DescricaoResumida em uma propriedade somente leitura (getter) que retorna dinamicamente a string baseada nos valores atuais de Nome e Artista:

class Musica
{
    public string Nome { get; set; }
    public string Artista { get; set; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    
    public string DescricaoResumida => $"A música {Nome} pertence à banda: {Artista}";

    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista}");
        Console.WriteLine($"Duração: {Duracao}");
        if (Disponivel)
        {
            Console.WriteLine("Disponível no plano gratuito.");
        }
        else
        {
            Console.WriteLine("Adquira o plano Plus+.");
        }
    }
}

Agora, o código está correto e deve funcionar sem problemas.