2
respostas

[Projeto] Criada classes para avaliar e registrar músicas, mas com um erro de armazenamento.

Eu fiz uma classe para registrar uma música e uma para avaliar a musica registrada, creio que estou com um problema na classe de registração, devo ter instanciado algo errado, mas que nao estou achando o problema, pois na hora de avaliar a musica me dá que ela não foi encontrada, poderiam analisar essas minhas duas classes e me ajudarem com o possível problema?

Classe Menu Registrar Musica:

using ScreenSound.Modelos;

namespace ScreenSound.Menus;

internal class MenuRegistrarMusica : Menu
{
    public override void Executar(Dictionary<string, Banda> bandasRegistradas)
    {
        base.Executar(bandasRegistradas);

        ExibirTituloDaOpcao("Registro de musicas");

        Console.Write("Digite a banda cujo a musica deseja registrar: ");
        string nomeDaBanda = Console.ReadLine()!;

        if (bandasRegistradas.ContainsKey(nomeDaBanda))
        {
            Console.Write("Agora digite o nome da musica que deseja registrar: ");
            string nomeMusica = Console.ReadLine()!;

            Banda banda = bandasRegistradas[nomeDaBanda];
            banda.AdicionarMusica(new Musica(nomeMusica));

            Console.WriteLine($"\nA musica {nomeMusica} de {nomeDaBanda} foi registrada com sucesso!");

            Thread.Sleep(2000);
            Console.Clear();
        }
        else
        {
            Console.WriteLine($"\nA banda {nomeDaBanda} não foi encontrada!");
            Console.WriteLine("Digite uma tecla para voltar ao menu principal");

            Console.ReadKey();
            Console.Clear();
        }
    }
}

Classe Menu Avaliar Musica:

using ScreenSound.Modelos;

namespace ScreenSound.Menus;

internal class MenuAvaliarMusica : Menu
{
    public override void Executar(Dictionary<string, Banda> bandasRegistradas)
    {
        base.Executar(bandasRegistradas);

        ExibirTituloDaOpcao("Avaliar musica");

        Console.Write("Digite o nome da musica que deseja avaliar: ");
        string nomeMusica = Console.ReadLine()!;

        if(bandasRegistradas.ContainsKey(nomeMusica))
        {
            Console.Write($"Qual a nota que essa musica merece? ");
            Avaliacao nota = Avaliacao.Parse(Console.ReadLine()!);

            Banda banda = bandasRegistradas[nomeMusica];
            banda.AdicionarNota(nota);

            Console.WriteLine($"\nA nota {nota.Nota} foi registrada com sucesso para a musica {nomeMusica}");

            Thread.Sleep(2000);
            Console.Clear();
        }
        else
        {
            Console.WriteLine($"\nA musica {nomeMusica} não foi encontrada!");
            Console.WriteLine("Digite uma tecla para voltar ao menu principal");

            Console.ReadKey();
            Console.Clear();
        }
    }
}
2 respostas

Olá Victor! Bom dia, tudo bom?

Pelo código que você compartilhou, identifiquei um possível problema na classe MenuAvaliarMusica. Na linha 12, você está verificando se bandasRegistradas contém a chave nomeMusica, quando na verdade deveria verificar se contém a chave nomeDaBanda.

Você pode corrigir esse trecho substituindo nomeMusica por nomeDaBanda:

if(bandasRegistradas.ContainsKey(nomeDaBanda))
{
    Console.Write($"Qual a nota que essa musica merece? ");
    Avaliacao nota = Avaliacao.Parse(Console.ReadLine()!);

    Banda banda = bandasRegistradas[nomeDaBanda];
    banda.AdicionarNota(nota);

    Console.WriteLine($"\nA nota {nota.Nota} foi registrada com sucesso para a musica {nomeMusica}");

    Thread.Sleep(2000);
    Console.Clear();
}

Além disso, na classe MenuExibirDetalhes, você precisa adicionar um Console.WriteLine() antes do loop foreach para exibir a palavra "Discografia". E também adicionar um espaço antes do texto "Digite uma tecla para voltar ao menu principal", na linha 21.

Aqui está o código corrigido:

using ScreenSound.Modelos;

namespace ScreenSound.Menus;

internal class MenuExibirDetalhes : Menu
{
    public override void Executar(Dictionary<string, Banda> bandasRegistradas)
    {
        base.Executar(bandasRegistradas);
        ExibirTituloDaOpcao("Exibir detalhes da banda");
        Console.Write("Digite o nome da banda que deseja conhecer melhor: ");
        string nomeDaBanda = Console.ReadLine()!;
        if (bandasRegistradas.ContainsKey(nomeDaBanda))
        {
            Banda banda = bandasRegistradas[nomeDaBanda];
            Console.WriteLine($"\nA média da banda {nomeDaBanda} é {banda.Media}.");
            Console.WriteLine("\nDiscografia:");
            foreach(Album album in banda.Albuns)
            {
                Console.WriteLine($"{album.Nome} -> {album.Media}");
            }
            Console.WriteLine("\nDigite uma tecla para voltar ao menu principal");
            Console.ReadKey();
            Console.Clear();
        }
        else
        {
            Console.WriteLine($"\nA banda {nomeDaBanda} não foi encontrada!");
            Console.WriteLine("Digite uma tecla para voltar ao menu principal");
            Console.ReadKey();
            Console.Clear();
        }
    }
}

Com essas correções, o problema de armazenamento deve ser resolvido. Espero ter ajudado! Bons estudos!

Bom dia André, muito obrigado pelo tempo dedicado para me ajudar, tentei arrumar o codigo do jeito que me instruiu, contudo quando eu tento trocar o nomeMusica por NomeDaBanda me da um erro pois essa variável não foi declarada dentro dessa classe: ![](Menu avaliar Musica )

Tentei também colocar bandasRegistradas.Nome mas também não é aceito. Já na classe Exibir Detalhes está tudo funcionando perfeitamente.