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

[Bug] E se a banda não tiver nota?! Ela crasha!

Meu código da função para saber a média de pontos da banda:

Dictionary<string, List<int>> bandasRegistradas = new Dictionary<string, List<int>>();
bandasRegistradas.Add("AcDc", new List<int> {10, 9, 7});
bandasRegistradas.Add("Teenage Fan Club", new List<int> ());

void ExibirMediaDaBanda()
{
    Console.Clear();
    ExibirTituloDaOpcao("Exibindo a média de pontos da banda");
    Console.Write("Digite o nome da banda que pretende saber a média: ");
    string bandaAvali = Console.ReadLine()!;   
    if(bandasRegistradas.ContainsKey(bandaAvali))        
    {
        double mediaPontosBanda = bandasRegistradas[bandaAvali].Average();
        double notaArredondado = Math.Round(mediaPontosBanda, 2);
        Console.WriteLine($"A média da banda {bandaAvali} é {notaArredondado}.");
        Thread.Sleep(4000);
        Console.Clear();
        ExibirOpcoesMenu();
    } else
    {
        Console.WriteLine($"Ou a banda {bandaAvali} não existe ou o nome inserido contém erros.");
        Console.Write("Digite uma tecla para voltar ao menu principal: ");
        Console.ReadKey();
        Console.Clear();
        ExibirOpcoesMenu();
    }
}

O programa crasha se for selecionado a opção para saber a média, o método acima, de uma banda que não possui ainda notas. Como adicionar este outro filtro de validação?

2 respostas

Olá, José! Bom dia!

Abaixo uma possível resolução.

solução!

Pelo que entendi, você está enfrentando um problema quando seleciona a opção para saber a média de uma banda que ainda não possui notas registradas. Você gostaria de adicionar um filtro de validação para tratar esse caso, correto?

Uma forma de resolver esse problema é verificar se a lista de notas da banda está vazia antes de calcular a média. Caso esteja vazia, você pode exibir uma mensagem informando que a banda ainda não possui notas registradas.

Para fazer isso, você pode adicionar um if logo após a linha if(bandasRegistradas.ContainsKey(bandaAvali)), verificando se a lista de notas da banda está vazia. Se estiver vazia, você pode exibir a mensagem adequada e voltar ao menu principal. Caso contrário, você realiza o cálculo da média normalmente.

Aqui está um exemplo de como você pode implementar essa validação:

void ExibirMediaDaBanda()
{
    Console.Clear();
    ExibirTituloDaOpcao("Exibindo a média de pontos da banda");
    Console.Write("Digite o nome da banda que pretende saber a média: ");
    string bandaAvali = Console.ReadLine()!;

    if (bandasRegistradas.ContainsKey(bandaAvali))
    {
        List<int> notasBanda = bandasRegistradas[bandaAvali];
        if (notasBanda.Count == 0)
        {
            Console.WriteLine($"A banda {bandaAvali} ainda não possui notas registradas.");
            Console.Write("Digite uma tecla para voltar ao menu principal: ");
            Console.ReadKey();
            Console.Clear();
            ExibirOpcoesMenu();
        }
        else
        {
            double mediaPontosBanda = notasBanda.Average();
            double notaArredondado = Math.Round(mediaPontosBanda, 2);
            Console.WriteLine($"A média da banda {bandaAvali} é {notaArredondado}.");
            Thread.Sleep(4000);
            Console.Clear();
            ExibirOpcoesMenu();
        }
    }
    else
    {
        Console.WriteLine($"A banda {bandaAvali} não existe ou o nome inserido contém erros.");
        Console.Write("Digite uma tecla para voltar ao menu principal: ");
        Console.ReadKey();
        Console.Clear();
        ExibirOpcoesMenu();
    }
}

Dessa forma, se a lista de notas da banda estiver vazia, a mensagem apropriada será exibida e você será redirecionado de volta ao menu principal. Caso contrário, a média será calculada normalmente.

Espero ter ajudado e bons estudos!