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

Código só tráz o primeiro nome. Como adicionar um contador para trazer outros nomes?

Olá a todos.

Estou testando para ver se retona um nome da lista, mas o resultado somente trás o primeiro nome. Quando procuro por um nome diferente de Almir o retorno é que o nome não foi encontrado na lista mesmo pertencendo a ela. O que está errado no código?

static void Main(string[] args) { EncontrarNome();

void EncontrarNome()
{
    string[] nomes = { "Almir", "Caio", "Ulisses", "Teobaldo", "Calango" };

    for (int i = 0; i < nomes.Length; i++)
    {
        Console.WriteLine(nomes[i]);
        
    }
    Console.Write("Digite o nome a ser buscado: ");
    string buscaDigitada = Console.ReadLine();

    foreach (string palavra in nomes)
    {

        if (palavra.Equals(buscaDigitada))
        {
            Console.Write($"Nome na lista: {palavra}. \n");
            Console.Write($"Nome Digitado: {buscaDigitada}.");

            }

        else
        {
            Console.WriteLine($"Nome não encontrado na  lista:");

            Console.Write($"Nome na lista: {palavra}. \n");
            Console.Write($"Nome Digitado: {buscaDigitada}.");

        }
        break;
    }
    Console.ReadKey();
}

}

3 respostas

Olá Ana,

O seu foreach roda apenas 1 vez devido ao break; contido na última linha dentro do bloco da iteração. Se voce mover o break; para a última linha do bloco da comparação if (palavra.Equals(buscaDigitada)), antes do fechamento do bloco, seu código irá funcionar.

solução!

Olá Ana!

Pelo que você descreveu, parece que o problema está na forma como o loop foreach está sendo utilizado. O break dentro do loop faz com que ele saia na primeira iteração, o que significa que ele só verifica o primeiro nome da lista. Para corrigir isso, você pode remover o break e ajustar a lógica para que ele continue verificando todos os nomes na lista.

Aqui está uma sugestão de como você pode ajustar o seu código:

static void Main(string[] args)
{
    EncontrarNome();

    void EncontrarNome()
    {
        string[] nomes = { "Almir", "Caio", "Ulisses", "Teobaldo", "Calango" };

        for (int i = 0; i < nomes.Length; i++)
        {
            Console.WriteLine(nomes[i]);
        }
        
        Console.Write("Digite o nome a ser buscado: ");
        string buscaDigitada = Console.ReadLine();

        bool nomeEncontrado = false;

        foreach (string palavra in nomes)
        {
            if (palavra.Equals(buscaDigitada))
            {
                Console.WriteLine($"Nome encontrado na lista: {palavra}.");
                nomeEncontrado = true;
                break;  // Agora você pode usar o break aqui, pois o nome foi encontrado
            }
        }

        if (!nomeEncontrado)
        {
            Console.WriteLine("Nome não encontrado na lista.");
        }

        Console.ReadKey();
    }
}

Neste ajuste, adicionei uma variável nomeEncontrado para verificar se o nome foi encontrado durante a iteração. Se o nome for encontrado, ele imprime a mensagem correspondente e usa o break para sair do loop. Caso contrário, após o loop, ele imprime que o nome não foi encontrado.

Espero ter ajudado e bons estudos!

Obrigado pela ajuda.