Parametros de entrada, arreglos bidimensionales

Iniciado por greenselves, 15 Marzo 2010, 16:19 PM

0 Miembros y 1 Visitante están viendo este tema.

greenselves

 :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 (csharp) [Seleccionar]
using System;

public class Arreglo
{
char[,] numeros;
int i, j;

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

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

//Lo he intentado con numeros = new char[arreglo.Length];
//pero marca error

for ( i=0; i < numeros.Length; i++)
{
for( j=0; j< numeros.Length; j++)
{
numeros[i,j] = arreglo[i,j];
}
}
}//constructor
}//class Arreglo

class MainApp
{
static void Main()
{
char[,] numeros = { {'O','O','O'},{'O','O','O'} };
Arreglo a = new Arreglo (numeros);

Console.ReadLine();
} // main
} // 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!!
Greenselves

Novlucker

Esto te parece cuadrado? :rolleyes:
{ {'O','O','O'},{'O','O','O'} }

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]


greenselves

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
Greenselves

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

greenselves

#5
Pero lo he intentado asi como dices

Código (csharp) [Seleccionar]
class MainApp
{
static void Main()
{
char[,] numeros = {{'O','O','O'},{'O','O','O'},{'O','O','O'}};
Arreglo a = new Arreglo (numeros);
a.Imprimir();

Console.ReadLine();
} // main
}


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

Novlucker

#6
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

greenselves


   // 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
Greenselves

greenselves


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!!!
Greenselves

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein