elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Indexadores en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Indexadores en C#  (Leído 3,789 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Indexadores en C#
« en: 27 Agosto 2013, 22:50 pm »

Hola a todos.
En este caso les consulto 2 cosas.-
1):¿Me podrían decir si el uso de Indexadores es correcta?.-
2):¿Que estoy haciendo mal que el array no me queda ordenado.-?

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class ProgramaApp
  6.    {
  7.        static void Main(string[] argumentos)
  8.        {
  9.            Entorno _Entorno = new Entorno();
  10.            _Entorno._entorno();
  11.  
  12.            Datos _datos = new Datos();
  13.            _datos._Datos();
  14.  
  15.            Console.Write("\n\n Pulse una tecla para cerrar la aplicación...");
  16.            Console.ReadLine();
  17.        }
  18.    }
  19. }
  20.  

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class Datos
  6.    {
  7.        private int[] numeros =  new int[10];
  8.  
  9.        public int this[byte indice]
  10.        {
  11.            get { return numeros[indice]; }
  12.            set { numeros[indice] = value; }
  13.        }
  14.  
  15.        public void _Datos()
  16.        {
  17.            Datos obj = new Datos();
  18.            byte _top = 2,hasElMom = 1;
  19.            int aux = 0;
  20.            Console.SetCursorPosition(02, _top);
  21.            Console.Write("Ingrese 10 entero(máximo 99999)");
  22.            _top += 2;
  23.            Console.SetCursorPosition(02, _top);
  24.            Console.Write("Natutal   Ordenados");
  25.            _top += 2;
  26.            for (byte i = 0; i < 10; i++)
  27.            {
  28.                while (true)
  29.                {
  30.                    Console.SetCursorPosition(02, _top);
  31.                    Console.Write("");
  32.                    if ((int.TryParse(Console.ReadLine(), out aux)) && aux < 100000)
  33.                    {
  34.                        obj[i] = aux;
  35.                        break;
  36.                    }
  37.                }
  38.                Array.Sort(numeros);
  39.                byte _topOrd = 6;
  40.                for (byte f = 0; f < hasElMom; f++)
  41.                {
  42.                    Console.SetCursorPosition(12, _topOrd);
  43.                    Console.Write("{0}", obj[f]);
  44.                    _topOrd++;
  45.                }
  46.                _top++;
  47.                hasElMom++;
  48.            }
  49.        }
  50.    }
  51. }

Bueno espero aflojar un poco, tengo miedo de cansarlos.-
Saludos.
Daniel

PD. Por unas horas voy a estar un poco ocupado en otra cosa (a las 19.10 juega la selección - Argentina)


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Juan.

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Indexadores en C#
« Respuesta #1 en: 28 Agosto 2013, 01:05 am »

Hay una cosa que no entiendo, Entorno, ¿sirve para algo? ( Entorno _Entorno = new Entorno(); _Entorno._entorno();)

Aparte, no creo que afecte mucho al programa eso, pero esto tampoco lo entiendo

Datos obj = new Datos(); (dentro de datos)

El objeto ya lo declaraste en main, ¿para que otro objeto?

Esto otro tampoco lo entiendo:

byte _top = 2,hasElMom = 1; ¿byte? Se desaconseja totalmente, en C# o usas un int o si es real un float/double. Todo lo demás es peor en todo, rendimiento, optimizar código, legibilidad, requerirá un cast implicito tarde o temprano

Vamos, tú código es una locura, no es claro y no hace cosas lógicas. Es el primer código tuyo que veo, pero no creo que me equivoque mucho si digo que no eres programador .net de hace tiempo, sino que vienes de otro lenguaje y te estás adaptando. ¿C?

Deberías mirarte algo de programación a objetos, creo que no terminas de entender el concepto y la filosofía de la misma y aparte, mejorar tú código, hay errores que hoy día no son aceptables, un while(true) con break dentro es uno de ellos, o forzar en el bucle for el 10 porque sí en vez de usar numeros.size() es otra de las cosas que dan buena impresión

Y ya lo de el constructor ejecute el programa no lo comento, un constructor es para inicializar los datos, no para ejecutar el programa. Aparte, los métodos/funciones se usan ahora de forma que cada uno de ellos haga solo una cosa, es decir, necesitarías uno para limpiar de la consola la parte que quieres, otro para ordenar y otro para imprimir el array ordenado

P.D el uso del índice si es correcto pero al tratarse de un array es innecesario


En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Indexadores en C#
« Respuesta #2 en: 29 Agosto 2013, 00:06 am »

Hola a todos.
Bueno al fin lo logre, me faltan algunas cosas pero funciona de una manera aceptable.-

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class ProgramaApp
  6.    {
  7.        static void Main(string[] argumentos)
  8.        {
  9.            Entorno entorno = new Entorno();
  10.            entorno._entorno();
  11.  
  12.            Datos datos = new Datos();
  13.            datos._Datos();
  14.  
  15.            Console.Write("\n\n Pulse una tecla para cerrar la aplicación...");
  16.            Console.ReadLine();
  17.        }
  18.    }
  19. }

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class Entorno
  6.    {
  7.        public void _entorno()
  8.        {
  9.            Console.Title = " Indexadores";
  10.            Console.WindowHeight = 30;
  11.            Console.WindowWidth = 70;
  12.            Console.BackgroundColor = ConsoleColor.Blue;
  13.            Console.ForegroundColor = ConsoleColor.Yellow;
  14.            Console.Clear();
  15.        }
  16.    }
  17. }

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class Datos
  6.    {
  7.        private int[] numeros = new int[5];
  8.  
  9.        public int this[byte indice]
  10.        {
  11.            get { return numeros[indice];}
  12.            set { numeros[indice] = value;}
  13.        }
  14.  
  15.        public void _Datos()
  16.        {
  17.            Datos obj = new Datos();
  18.            byte _top = 2;
  19.            int aux = 0;
  20.            Console.SetCursorPosition(02, _top);
  21.            Console.Write("Ingrese 10 entero(máximo 99999)");
  22.            _top += 2;
  23.            Console.SetCursorPosition(02, _top);
  24.            Console.Write("Natutal   Ordenados");
  25.            _top += 2;
  26.            Ordenar ordenar = new Ordenar();
  27.            for (byte i = 0; i < numeros.Length; i++)
  28.            {
  29.                while (true)
  30.                {
  31.                    Console.SetCursorPosition(02, _top);
  32.                    Console.Write("");
  33.                    if ((int.TryParse(Console.ReadLine(), out aux)) && aux < 100000)
  34.                    {
  35.                        obj[i] = aux;
  36.                        break;
  37.                    }
  38.                }
  39.                _top++;
  40.                ordenar.ordenar(obj.numeros, i);
  41.            }
  42.        }
  43.    }
  44. }

Código
  1. using System;
  2.  
  3. namespace IndexadoresArray
  4. {
  5.    class Ordenar
  6.    {
  7.        public void ordenar(int[] aOrdenar,int cTraigo)
  8.        {
  9.            int temp = 0; cTraigo++;
  10.            for (int e = 0; e < cTraigo; e++)
  11.            {
  12.                for (int i = 0; i < cTraigo - 1; i++)
  13.                {
  14.                    if (aOrdenar[i] > aOrdenar[i + 1])
  15.                    {
  16.                        temp = aOrdenar[i];
  17.                        aOrdenar[i] = aOrdenar[i + 1];
  18.                        aOrdenar[i + 1] = temp;
  19.                    }
  20.                }
  21.            }
  22.            byte filaCd = 6;
  23.            for (byte m = 0; m < cTraigo; m++)
  24.            {
  25.                Console.SetCursorPosition(12, filaCd); Console.Write("                   ");
  26.                Console.SetCursorPosition(12, filaCd); Console.Write("" + aOrdenar[m]);
  27.                filaCd++;
  28.            }
  29.        }
  30.    }
  31. }

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Indexadores en C#
« Respuesta #3 en: 12 Septiembre 2013, 18:43 pm »

Primero que todo, trato de entender que esto es un clase que tu creas llamada Datos, ahora, debes crear una instancia de esta clase en el metodo main, o sea en el punto de partida de tu proyecto.

Código
  1. Datos a = new Datos()

Código
  1. class Datos
  2.   {
  3.       private int[] numeros = new int[5];
  4.  
  5.       public int this[byte indice]
  6.       {
  7.           get { return numeros[indice];}
  8.           set { numeros[indice] = value;}
  9.       }
  10.  
  11.       public void _Datos()
  12.       {
  13.           Datos obj = new Datos();
  14.           byte _top = 2;
  15.           int aux = 0;
  16.           Console.SetCursorPosition(02, _top);
  17.           Console.Write("Ingrese 10 entero(máximo 99999)");
  18.           _top += 2;
  19.           Console.SetCursorPosition(02, _top);
  20.           Console.Write("Natutal   Ordenados");
  21.           _top += 2;
  22.           Ordenar ordenar = new Ordenar();
  23.           for (byte i = 0; i < numeros.Length; i++)
  24.           {
  25.               while (true)
  26.               {
  27.                   Console.SetCursorPosition(02, _top);
  28.                   Console.Write("");
  29.                   if ((int.TryParse(Console.ReadLine(), out aux)) && aux < 100000)
  30.                   {
  31.                       obj[i] = aux;
  32.                       break;
  33.                   }
  34.               }
  35.               _top++;
  36.               ordenar.ordenar(obj.numeros, i)
  37.           }
  38.       }
  39.   }

segunda aclaración sobre lo del tamaño del array que me hablas. Cuando quieres pasarle datos a una instancia que vayas a crear de una clase, la clase en cuestion debe tener un constructor, un constructor es como un metodo que se llama cuando instancias una clase, por lo tanto le puedes pasar parametros. En este caso, le pides un dato al usuario por la consola

Código
  1. int size = int.Parse(Console.ReadLine());
  2. //y se lo pasas a la instancia de datos
  3. Datos a = new Datos(size);

Este constructor debe estar dentro de la clase datos con esta signatura

Código
  1. public Datos(int size)
  2. {
  3. //lo que quieras hacer, en este caso asignarle el parametro size a tu array
  4. }
  5.  

Por ultimo, como dice Juan. No deberias crear una instancia de tu mismo tipo en el método
 
Código
  1. public void Datos()


porque en este caso no es necesario.

Si lo haces porque quieres utilizar el array dentro de tu clase, utilizas la palabra reservada this

Ejemplo:
Código
  1. //Estamos dentro de la clase Datos y quieres acceder al indexer lo haces de esta manera
  2. this[tuNumeroIndice] = ALGO;

Espero te haya sido de ayuda, saludos
« Última modificación: 12 Septiembre 2013, 18:50 pm por DarK_FirefoX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines