Oii, Pedro! Tudo bem?
Muito legal a sua iniciativa de não se limitar ao enunciado e criar uma aplicação de console que aceita argumentos dinâmicos! Isso é muito útil no dia a dia para testar cenários diferentes sem precisar recompilar o código ("hard code").
Sobre sua dúvida da "entrada": geralmente, em exercícios de lógica introdutória, o instrutor opta por valores fixos no código apenas para que o aluno foque exclusivamente na lógica de manipulação daquele dado (no caso, aprender o método IndexOf), sem se preocupar com a complexidade de tratar entradas externas. Mas seu pensamento de "software real" está certíssimo!
Agora, queria aproveitar seu código para trazer uma reflexão sobre as coleções, já que estamos no curso de C#:
- Redundância do dictionary: O Array, por natureza, já é uma coleção indexada (0, 1, 2...). Quando você cria um
Dictionary<int, int> onde a Chave é o índice do loop i, você está basicamente recriando a estrutura que o Array já te oferece de graça. - Performance e simplicidade: O uso do
FirstOrDefault funciona, mas ele percorre a coleção pra achar o valor. O método Array.IndexOf (foco da aula) faz exatamente isso, mas é otimizado pra Arrays e deixa o código mais limpo. - Um detalhe perigoso: Se por acaso você passar uma sequência que não tenha o número 19, o
FirstOrDefault vai retornar o valor padrão do par chave/valor (que é 0). Isso diria que o número 19 está na posição 0, o que seria um falso positivo! O Array.IndexOf retornaria -1, indicando erro.
Que tal unir o melhor dos dois mundos? A sua ideia dos args com a simplicidade dos Arrays?
Ficaria assim:
// converte os args (string) diretamente para um array de inteiros
// se quiser fazer na mão, um loop for simples preenchendo o array funciona também!
int[] numeros = Array.ConvertAll(args, int.Parse);
// usa o método da aula para achar os índices
int pos19 = Array.IndexOf(numeros, 19);
int pos42 = Array.IndexOf(numeros, 42);
int pos7 = Array.IndexOf(numeros, 7);
// verifica se todos foram encontrados (diferente de -1) antes de mostrar
if (pos19 != -1 && pos42 != -1 && pos7 != -1)
{
Console.WriteLine($"Combinação: {pos19}-{pos42}-{pos7}");
}
else
{
Console.WriteLine("Algum dos números da combinação não foi encontrado na sequência!");
}
Parabéns por ir além do exercício! Continue compartilhando suas soluções.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!