Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: greenselves en 15 Marzo 2010, 16:19 pm



Título: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 16:19 pm
 :DHola! tengo que hacer un programa en C# donde tengo que imprimir una tabla cuadrada de caracteres, esto con arreglos bidimensionales.
Mi problema es el paso del Arreglo Bid. al constructor. tengo esto.



Código
  1. using System;
  2.  
  3. public class Arreglo
  4. {
  5. char[,] numeros;
  6. int i, j;
  7.  
  8. public Arreglo( char [,] arreglo)
  9. {  //constructor
  10.  
  11. numeros = new char[arreglo.Length, arreglo.Length];
  12.  
  13. //Lo he intentado con numeros = new char[arreglo.Length];
  14. //pero marca error
  15.  
  16. for ( i=0; i < numeros.Length; i++)
  17. {
  18. for( j=0; j< numeros.Length; j++)
  19. {
  20. numeros[i,j] = arreglo[i,j];
  21. }
  22. }
  23. }//constructor
  24. }//class Arreglo
  25.  
  26. class MainApp
  27. {
  28. static void Main()
  29. {
  30. char[,] numeros = { {'O','O','O'},{'O','O','O'} };
  31. Arreglo a = new Arreglo (numeros);
  32.  
  33. Console.ReadLine();
  34. } // main
  35. } // main app

Al compilar [lo compilo desde consola], no me marca error
pero al ejecutar me aparece una excepcion

la excepcion es:

Unhandled Exception: System.IndexOutOfRnageException: Index was outside the bounds of the array.
at Arreglo..ctor<Char[,] arreglo>
at MainApp.Main<>

Espero me puedan ayudar, por su ayuda gracias!!


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: Novlucker en 15 Marzo 2010, 16:28 pm
Esto te parece cuadrado? :rolleyes:
{ {'O','O','O'},{'O','O','O'} }

Saludos


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: [D4N93R] en 15 Marzo 2010, 18:42 pm
A mi me parece un rectángulo! :D


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 19:42 pm
hmm Mas bien es como ejemplo, el dato es que no me daje compilar porque la forma en la que hago el paso por parametros esta incorrecta.
Es por eso que necesita la ayuda


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: Novlucker en 15 Marzo 2010, 19:45 pm
Pero eso no es lo que dice el error que has dejado ... el error que nos dejas es justamente por eso ... tienes un array rectangular, y no cuadrado, así que mientras puedes recorrer un lado "más lejos", el otro se termina antes :P

Saludos


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 19:52 pm
Pero lo he intentado asi como dices

Código
  1. class MainApp
  2. {
  3. static void Main()
  4. {
  5. char[,] numeros = {{'O','O','O'},{'O','O','O'},{'O','O','O'}};
  6. Arreglo a = new Arreglo (numeros);
  7. a.Imprimir();
  8.  
  9. Console.ReadLine();
  10. } // main
  11. }

Ejecutando me aparece el mismo error.
que deberia hacer??


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: Novlucker en 15 Marzo 2010, 20:04 pm
No veo nada malo con el código, seguro que el error te da ahí y no en el método imprimir()?

Etiquetas de código!

Saludos


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 20:07 pm

   // mi metodo imprimir
   public void Imprimir()
   {

   Console.WriteLine();
      for (i=0; i<3; i++)
      {
   
         for(j=0; j<3; j++)
         {
            Console.Write("El valor {0} ", numeros[i,j]);
   
         }
      }
   }// imprimir


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 20:37 pm

Y a encontre mi problema
tuve que cambiar en el constructor numeros.Length por el tamaño del arreglo (3);
y el codigo queda asi

   public Arreglo( char [,] arreglo)
   {  //constructor

      numeros = new char[arreglo.Length,arreglo.Length];

      for ( i=0; i < 3; i++)
      {
         for( j=0; j< 3; j++)
         {
         numeros[i,j] = arreglo[i,j];
         }

      }
   
   }



   // mi metodo imprimir
   public void Imprimir()
   {

   Console.WriteLine();
      for (i=0; i<3; i++)
      {
   
         for(j=0; j<3; j++)
         {
            Console.Write(" {0} ", numeros[i,j]);
   
         }
                Console.WriteLine();
      }
   }// imprimir


gracias por su ayuda
saludos!!!


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: Novlucker en 15 Marzo 2010, 20:42 pm
Aaaaaaaaaaaa!

Ya he visto cual es el problema, no me había dado cuenta :P ... estas usando numeros.length, y el largo de una matriz es siempre la suma de todas sus dimensiones, así que si tienes una de 3x3, entonces el largo es 9, y ahí es donde te pasabas en el for

Tienes que usar getlength

Saludos


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: greenselves en 15 Marzo 2010, 21:11 pm
tienes las sintaxias, para implementarlo??



   public Arreglo( char [,] arreglo)
   {  //constructor

      numeros = new char[arreglo.Length, arreglo.Length];

      for ( i=0; i < GetLength(0); i++)
      {
         for( j=0; j< GetLength(1); j++)
         {
         numeros[i,j] = arreglo[i,j];
         }

      }
   
   }

como lo he encontrado en unos sitios, debe ir asi, pero me sale error


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: Novlucker en 15 Marzo 2010, 22:55 pm
numeros.getlength(0)

Saludos


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: raul338 en 16 Marzo 2010, 01:05 am
usen las etiquetas code :¬¬


Título: Re: Parametros de entrada, arreglos bidimensionales
Publicado por: [D4N93R] en 16 Marzo 2010, 05:45 am
[ code=csharp]<Tu codigo aki!!!!>[/code ] Sin los espacios :P