1
resposta

[Dúvida] Solução com FOREACH

Fiz a minha função de uma forma diferente, talvez tenha até complicado um pouco mais, mas fiz com base nos exercícios práticos deixados anteriormente e ficou assim:

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))
    {
        foreach (var notas in bandasRegistradas)
        {
            double media = notas.Value.Average();
            Console.WriteLine($"A media da banda {nomeDaBanda} foi: {media}");
            Console.WriteLine("\nDigite uma tecla para voltar ao menu principal!");
            Console.ReadKey();
            Console.Clear();
            ExibirOpcoesDoMenu();
        }
    } else
    {
        Console.WriteLine($"A banda {nomeDaBanda} não está registrada ou não existe.");
        Console.WriteLine("\nDigite uma tecla para voltar ao menu principal!");
        Console.ReadKey();
        Console.Clear();
        ExibirOpcoesDoMenu();
    }
}

Está errado?

1 resposta

Opa mano! Sua lógica tá quase certa, mas tem um detalhe ali que pode estar te atrapalhando.

Quando você faz o foreach dentro do if, você acaba percorrendo todas as bandas do dicionário, mesmo já tendo o nome da banda que o usuário digitou. Com isso, o programa calcula a média de todas as bandas, mas sempre mostrando como se fosse da banda que o usuário digitou, o que gera esse tipo de resultado:

A média da banda Banda Exemplo foi: 8
A média da banda Banda Exemplo foi: 9.5
A média da banda Banda Exemplo foi: 10

Ou seja, ele mostra várias médias, mas sempre com o mesmo nome de banda. O resultado correto deveria ser algo assim:


A média da banda Banda A foi: 8
 

Como você já tem o nome da banda, não precisa do foreach. Dá pra acessar direto as notas dela e calcular a média assim:

if (bandasRegistradas.ContainsKey(nomeDaBanda))
{
    List<int> notasDaBanda = bandasRegistradas[nomeDaBanda];
    double media = notasDaBanda.Average();
    Console.WriteLine($"\nA média da banda {nomeDaBanda} é {media}.");
}

Mas no mais, parece que ta tudo certo!