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?)
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?)
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:
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.