[ Foro de C# ]
Hola a todos, estoy empezando con esto de la programación y estoy llevando el curso de Nacho Cabanes para C# ( que por cierto lo recomiendo), estoy atascado con este ejercicio:
"Ejercicio propuesto 4.1.3.6: Un programa que pida 10 nombres y los memorice (pista: esta vez se trata de un array de "string"). Después deberá pedir que se teclee un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que se teclee "fin"."
lo he intentado de varias formas y nada no me sale, esta es la ultima forma que lo he intentado:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _arrays_9
{
class Program
{
static void Main(string[] args)
{
string[] nombres = new string[2];
Console.WriteLine("dime 10 nombres, despues te pedire que teclees alguno
y te dire si se encuentra entre los que introducistes, hasta que escribas
\"fin\"");
int contador = 0;
while (contador<2)
{
nombres[contador] = Console.ReadLine();
contador++;
}
Console.WriteLine();
string nombre;
do
{
Console.WriteLine("introduce un nombres y te diré si esta entre los que
tecleastes");
nombre = Console.ReadLine();
foreach (string localizar in nombres)
{
if (localizar == nombre)
{
Console.WriteLine("el nombre se encuentra");
}
else
{
Console.WriteLine("el nombre no se encuentra");
}
}
} while (nombre!="fin");
}
}
}
El array lo puse a dos por ya estaba harto de teclear 10 cada vez que lo intentaba
:-(( .
A ver si alguien me puede dar un poco de Luz.
Muchas gracias de antemano.
A ver que te parece asi;
static void Main(string[] args)
{
BuscarNombre lista = new BuscarNombre();
lista.PeticionNombres();
int resultado;
do
{
resultado = lista.Buscar();
switch (resultado)
{
case 0:
Console.WriteLine("El nombre no se encuentra en la lista");
break;
case 1:
Console.WriteLine("El nombre se encuentra en la lista");
break;
case 2:
Console.WriteLine("Fin de programa...");
break;
}
} while (resultado != 2);
Console.ReadLine();
}
class BuscarNombre
{
string[] lista = new string[2];
public void PeticionNombres()
{
for (int i = 0; i < lista.Length; i++)
{
Console.WriteLine($"Introduzca el nombre numero {i}");
lista[i] = Console.ReadLine();
}
}
public int Buscar()
{
string nombre = "";
Console.WriteLine("Introduzca un nombre");
nombre = Console.ReadLine();
foreach (var item in lista)
{
if (item == nombre)
{
return 1;
}
else if (nombre == "fin")
{
return 2;
}
}
return 0;
}
}
Santi, tu solución se acerca mucho, pero necesitas un booleano de control. Si el dato aparece una vez, no debes decir "no está" 9 veces. ;-)
Muchas gracias por responder
Eduardo, tu respuesta me ha servido para practicar con switch que lo tenia un poco abandonado y me ha refrescado la memoria.
Nacho, ante todo felicitarte y agradecerte el gran trabajo que haces para la comunidad. ;-)
Al final con el control booleano parece que va bien, la verdad es que no se me había ocurrido, necesitare dar un repaso al tema , se que se puede depurar con controles de errores pero bueno poco a poco.
este es el código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _arrays_9
{
class Program
{
static void Main(string[] args)
{
string[] nombres = new string[2];
Console.WriteLine("dime 10 nombres, despues te pedire que teclees alguno" +
"y te dire si se encuentra entre los que introducistes, hasta que escribas \"fin\"");
int contador = 0;
while (contador < 2)
{
nombres[contador] = Console.ReadLine();
contador++;
}
Console.WriteLine();
string nombre;
do
{
Console.WriteLine("introduce un nombres y te diré si esta entre los que tecleastes");
nombre = Console.ReadLine();
bool encontrado = false;
foreach (string localizar in nombres)
{
if (localizar == nombre)
{
encontrado = true;
}
}
if (encontrado)
{
Console.WriteLine("El nombre se encuentra");
}
else
{
Console.WriteLine("el nombre no se encuentra");
}
} while (nombre != "fin");
}
}
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)