none
Objetos en listas RRS feed

  • Pregunta

  • Hola que tal, soy nuevo en esto de la programacion y me puse a practicar con listas y objetos pero me sale un output no deseado y me esta taladrando la cabeza jajaja, aca va el codigo que tengo armado: 

    class Empleados
        {
            static string nombre;
            static int edad;
    
            public Empleados(string nombre1,int edad1)
            {
                nombre = nombre1;
                edad = edad1;
            }
    
            public static string getNombre()
            {
                return nombre;
            }
    
            public static int getEdad()
            {
                return edad;
            }
    
        }


    class ListaEmpleados
        {
            public static List<Empleados> empleados = new List <Empleados>();
            int contador;
    
            public void NuevoEmpleado(string nombre, int edad)
            {
                Empleados empleado = new Empleados(nombre, edad);
                    empleados.Insert(contador, empleado);
                    contador++;
            }
        }


    class Program
        {
            static void Main(string[] args)
            {
                
                ListaEmpleados lista = new ListaEmpleados();
                lista.NuevoEmpleado("daniel", 32);
                lista.NuevoEmpleado("diego", 50);
                lista.NuevoEmpleado("sergio", 40);
    
                foreach (Empleados i in ListaEmpleados.empleados)
                {
                    Console.WriteLine($"El nombre es: {Empleados.getNombre()} y la edad es: {Empleados.getEdad()}");
                }
    
            }
        }

    Y este es el output que recibo: 

    El nombre es: sergio y la edad es: 40
    El nombre es: sergio y la edad es: 40
    El nombre es: sergio y la edad es: 40
    Presione una tecla para continuar . . .

    Porque sucede esto? porque la variable nombre y edad toman los ultimos datos que les paso unicamente y no se almacenan?

    Hay algo que me falta o que es lo que esta mal en el codigo?

    Desde ya muchas gracias




    • Editado Pikuuuu viernes, 18 de septiembre de 2020 5:20
    viernes, 18 de septiembre de 2020 5:19

Respuestas

  • No, el error está en el bucle:

    foreach (Empleados i in ...)

    fíjate que la variable "i" es la que itera sobre la lista. Pero después, dentro del bucle, no usas para nada la i, sino que escribes el resultado de llamar a sendos métodos estáticos de la clase Empleados. Al ser estáticos conservan el último valor, que se imprime en todas las iteraciones del bucle.

    El remedio inmediato sería usar la i dentro del bucle, pero además de eso es necesario que quites los "static" en la clase Empleados y dejes todo como variables de instancia. Mientras sean static, solo es posible almacenar un único empleado.

    • Propuesto como respuesta Andres Aguilar MModerator viernes, 18 de septiembre de 2020 14:47
    • Marcado como respuesta Pikuuuu viernes, 18 de septiembre de 2020 15:20
    viernes, 18 de septiembre de 2020 6:45
    Moderador

Todas las respuestas

  • No, el error está en el bucle:

    foreach (Empleados i in ...)

    fíjate que la variable "i" es la que itera sobre la lista. Pero después, dentro del bucle, no usas para nada la i, sino que escribes el resultado de llamar a sendos métodos estáticos de la clase Empleados. Al ser estáticos conservan el último valor, que se imprime en todas las iteraciones del bucle.

    El remedio inmediato sería usar la i dentro del bucle, pero además de eso es necesario que quites los "static" en la clase Empleados y dejes todo como variables de instancia. Mientras sean static, solo es posible almacenar un único empleado.

    • Propuesto como respuesta Andres Aguilar MModerator viernes, 18 de septiembre de 2020 14:47
    • Marcado como respuesta Pikuuuu viernes, 18 de septiembre de 2020 15:20
    viernes, 18 de septiembre de 2020 6:45
    Moderador
  • Hola Pikuuuu, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    viernes, 18 de septiembre de 2020 14:47
    Moderador
  • Hola Pikuuuu

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      


    viernes, 18 de septiembre de 2020 20:43
    Moderador