1
resposta

Buscando em uma lista

Fiz esse programa de três formas: uma com o foreach, que foi a que eu fiz inicialmente, antes de saber que teria que armazenar a posição encontrada, outra com o for e mais uma com o while. Daria para fazer com que o foreach também armazenasse a posição encontrada, só que isso seria contraintuitivo para o método.

While:

var listaAlunos = new List<string>() { "Ana", "Carlos", "Bianca", "João", "Marina" };
bool alunoEncontrado = false;
int posicaoAluno = 0;

Console.Clear();
Console.Write ("Digite o aluno a ser buscado: ");
string nomeAluno = Console.ReadLine()!;

int i = 0;
while (i < listaAlunos.Count) {
    if (listaAlunos[i] == nomeAluno) {
        posicaoAluno = i;
        alunoEncontrado = true;
    }
    i++;
}

if (alunoEncontrado) Console.WriteLine ($"O aluno {nomeAluno} foi encontrado na posição {posicaoAluno+1} da lista de chamada.");   
else Console.WriteLine ($"O aluno {nomeAluno} não foi encontrado na lista."); 

For:

var listaAlunos = new List<string>() { "Ana", "Carlos", "Bianca", "João", "Marina" };
bool alunoEncontrado = false;
int posicaoAluno = 0;

Console.Clear();
Console.Write ("Digite o aluno a ser buscado: ");
string nomeAluno = Console.ReadLine()!;

for (int i = 0; i < listaAlunos.Count; i++) {
    if (listaAlunos[i] == nomeAluno) {
        posicaoAluno = i;
        alunoEncontrado = true;
    }
}

if (alunoEncontrado) Console.WriteLine ($"O aluno {nomeAluno} foi encontrado na posição {posicaoAluno+1} da lista de chamada.");   
else Console.WriteLine ($"O aluno {nomeAluno} não foi encontrado na lista."); 

Foreach:

var listaAlunos = new List<string>() { "Ana", "Carlos", "Bianca", "João", "Marina" };
bool alunoEncontrado = false;

Console.Clear();
Console.Write ("Digite o aluno a ser buscado: ");
string nomeAluno = Console.ReadLine()!;

foreach (string nome in listaAlunos) {
    if (nomeAluno == nome) {
        alunoEncontrado = true;
    }
}

if (alunoEncontrado) Console.WriteLine ($"O aluno {nomeAluno} foi encontrado na lista.");   
else Console.WriteLine ($"O aluno {nomeAluno} não foi encontrado na lista."); 
1 resposta

Oi, Diego! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você resolveu o exercício utilizando três estruturas diferentes de repetição (for, while e foreach). Isso mostra uma ótima prática de estudo, comparando abordagens e entendendo quando cada estrutura faz mais sentido. Também foi muito interessante sua observação sobre o foreach, já que ele realmente não foi pensado para controlar posição de forma direta.

Uma dica interessante para o futuro é conhecer o método IndexOf() das listas, que pode ajudar a encontrar diretamente a posição de um elemento. Veja este exemplo:



var listaAlunos = new List() { "Ana", "Carlos", "Bianca", "Joao", "Marina" };

Console.Write("Digite o aluno a ser buscado: ");
string nomeAluno = Console.ReadLine();

int posicao = listaAlunos.IndexOf(nomeAluno);

if (posicao != -1)
{
    Console.WriteLine("Aluno encontrado na posicao " + (posicao + 1));
}
else
{
    Console.WriteLine("Aluno nao encontrado na lista");
}

Neste exemplo usamos IndexOf, que retorna a posição do elemento na lista. Se o valor retornado for -1, significa que o nome não está presente na lista.

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!