3
respostas

[Dúvida] Mas e no caso da banda não possui notas registradas?

Na aula 5, o desafio passado não leva em conta a possibilidade de uma banda existente não possuir notas registradas. Como seria possível lidar com esse caso? (O if precisaria de alguma alteração?)

3 respostas

Moacir,

Acho que o erro que você se refere é este:

Você cadastra uma banda (opção 1), depois manda exibir a média de uma banda (opção 4). Aparece o erro:

Erro ao exibir a média da banda

Exatamente, para corrigir esse problema podemos fazer de várias formas. Por exemplo, podemos incluir um "IF" na função "ExibirMedia()":

void ExibirMedia()
{
    Console.Clear();
    ExibirTituloDaOpcao("Exibir média da banda");
    Console.Write("Digite o nome da banda que deseja exibir a média: ");
    string nomeDaBanda = Console.ReadLine()!;

    if (bandasRegistradas.ContainsKey(nomeDaBanda))
    {
        List<int> notasDaBanda = bandasRegistradas[nomeDaBanda];

        if (notasDaBanda.Count > 0)
            Console.WriteLine($"\nA média da banda {nomeDaBanda} é {notasDaBanda.Average()}.");
        else
            Console.WriteLine("A banda NÃO tem notas");

        Console.ReadKey();
        Console.Clear();
        ExibirOpcoesDoMenu();

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

Podemos também tratar o erro com tratamento de exceções "Try-Catch" informando ao usuário que a banda NÃO possui notas.

void ExibirMedia()
{
    try
    {
        Console.Clear();
        ExibirTituloDaOpcao("Exibir média da banda");
        Console.Write("Digite o nome da banda que deseja exibir a média: ");
        string nomeDaBanda = Console.ReadLine()!;

        if (bandasRegistradas.ContainsKey(nomeDaBanda))
        {
            List<int> notasDaBanda = bandasRegistradas[nomeDaBanda];
            Console.WriteLine($"\nA média da banda {nomeDaBanda} é {notasDaBanda.Average()}.");
            Console.WriteLine("Digite uma tecla para votar ao menu principal");
            Console.ReadKey();
            Console.Clear();
            ExibirOpcoesDoMenu();

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

    }
    catch (Exception)
    {
        Console.WriteLine();
        Console.WriteLine("A banda NÃO possui notas.");
        Console.WriteLine("Digite uma tecla para voltar ao menu principal");
        Console.ReadKey();
        Console.Clear();
        ExibirOpcoesDoMenu();
    }
}

Deve ter outras formas de tratar esse erro, mas espero que eu tenha sanado sua dúvida.

Sua dúvida foi resolvida NÃO esqueça de fechar o tópico e de me pontuar. Obrigado!

[]'s,

Fabio I.

Boa Fabio! Uma outra de forma de resolver também é utilizar o método Any()

Brevemente, o método Any(), que faz parte da classe Enumerable, por sua vez pertencente ao namespace System.Linq, é usado para verificar SE uma coleção de elementos, no nosso caso as bandasRegistradas, contém pelo menos um elemento que satisfaça a nossa condição.

Isto é, SE essa banda está registrada e SE ela possui alguma nota atribuída.

O uso é bem simplificado:

void ExibirMediaDaBanda()
{
     Console.Clear();
     ExibirTituloDaOpcao("Exibir a média de uma banda");
     Console.Write("Digite o nome da banda que deseja ver a avaliação média: ");
     string nomeDaBanda = Console.ReadLine()!;
     
      if (bandasRegistradas.ContainsKey(nomeDaBanda))
            {
                List<int> notasDaBanda = bandasRegistradas[nomeDaBanda];

               if (notasDaBanda.Any())//Verifica SE a banda possui alguma nota associada.
                {
                    double mediaDaBanda = notasDaBanda.Average();
                    Console.WriteLine($"Essa é a avaliação média da banda {nomeDaBanda}: {mediaDaBanda}");
                }
                else
                {
                    Console.WriteLine($"\n[!] A banda {nomeDaBanda} ainda não possui avaliações!");
                }
            }
            else
            {
                Console.WriteLine($"\n[!] A banda {nomeDaBanda} não está registrada!");
            }
            Console.WriteLine("\n[i] Pressione qualquer tecla para voltar ao menu principal");
            Console.ReadKey();
        }
}

Espero que mais essa possibilidade seja útil! ;)

William,

Podemos, tecnicamente, chamar isso de REFATORAÇÃO de código? Eu acho que sim.

Mandou bem! Valew!

[]'s,

Fabio I.