[ Foro de C# ]

Evitar duplicados en matriz

26-Jun-2017 17:12
Invitado (ELEAEFE)
1 Respuestas

tengo este código:

Métodos:

 
class Program { static void agregar(int[] lista, int cantidad, ref int tope) {//agrega un nuevo elemento a un array con tope lista[tope] = cantidad; tope++; }
 
    static void cargarjugada (int[,]m, int napostante) //CARGAR LA JUGADA PARA CADA APOSTANTE
        {
 
 
 
            for(int col=0; col<m.GetLength(1);col++)
            {
 
                m[napostante,col] = Convert.ToInt32(Console.ReadLine());
 
               }
              }
Y este en el main:
 
case 1: Console.Clear(); Console.WriteLine("\t\t1 - Agregue una apuesta: "); if (tope < nombre.Length) {
 
                        Console.Write("Ingrese Nombre: ");
                        nombre[tope] = Console.ReadLine();
                        Console.Write("Ingrese Apellido: ");
                        apellido[tope] = Console.ReadLine();
                        Console.Write("Ingrese su Jugada : ");
                        cargarjugada(matriz, tope);
                        agregar(vector, cantidad, ref tope);
 
 
 
 
 
 
 
                    }
                    else
                    {
                        Console.WriteLine("No hay mas cupos");
                        Console.ReadLine();
                    }
 


como podría controlar que los números ingresados no se repitan y no se ingresen letras en lugar de numeros?, esto mismo lo puedo aplicar luego para un Random. Es programación estructurada y puedo utilizar comparadores, variables, matrices y arrays.


27-Jun-2017 11:21
Rubén Coca

Buenas.

Puedes probar,  que cada vez que se introduzca un número, compararlo con todos los datos que tengas en el array. Si el número ya está, que vuelva a pedir otro número y si no, que continue.

Respecto a lo de asegurar que sólo sean números y no letras, puedes utilizar try-catch. Así, cada vez que no introduzcas el formato adecuado, lo tengas controlado y puedas volver a pedir hasta que el formato sea adecuado.

Primero haría el try-catch para asegurar que es un número, y luego lo compararía con el array.

Algo así se me ocurre. Espero que te sirva. Seguramente se pueda optimizar.

 
using System;
 
public class Prueba
{
	public static void Main()
	{
		int numero = 0;	
		int[] vector = {5, 7, 9, 12, 35, 4, 34, 13, 21, 29};
		bool esNumero = false;
 
		//COMPRUEBO Y FILTRO SI ES UN NÚMERO
		do
		{
			try
			{
				Console.WriteLine("Introduce un número");
				numero = Convert.ToInt32(Console.ReadLine());
				esNumero = true;
			}
			catch(FormatException)
			{
				Console.WriteLine("No es un número válido");	
				esNumero = false;
			}
		}
		while(esNumero == false);
 
		//COMPRUEBO SI NÚMERO YA EXISTE EN EL ARRAY
		esNumero = false;	
		for(byte i = 0 ; i < vector.Length ;  i++)
		{
			if(numero == vector[i])
			{
				esNumero = true;
				break;
			}			
		}
		if(esNumero == true)
			Console.WriteLine("El número ya existe");
		else
			Console.WriteLine("El número no existe");
	}
}
 


 






(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.)