2010-12-08 11 views
18

Tengo una asignación para una clase que se debe hacer en C#. Siendo un novato de C# completo, primero hice el proyecto en Java y ahora estoy tratando de convertirlo a C#. Tengo la siguiente función que da como resultado el siguiente error de compilación.Error del compilador: Especificador de rango inválido: esperado ',' o ']' en Inicialización de matriz bidimensional

Error: no válida especificador de rango: espera '', o ']' en la línea siguiente:

int[][] grid=new int[g.cols][g.rows]; 

estudio Visual ha subrayado la g en g.rows

public int[][] getConvergenceCounts(MandelbrotGrid g){ 
    int[][] grid=new int[g.cols][g.rows]; 

    for(int x=0;x<g.cols;x++){ 
    for(int y=0;y<g.rows;y++){ 
     double tx=x*(double)3/400-1.5; 
     double ty=y*(double)3/400-1.5; 
     grid[x][y]=getConvergenceCount(new Complex(ty,tx)); 
    } 
    } 

    return grid; 
} 

I No tengo idea de lo que estoy haciendo mal aquí y leer en las matrices multidimensionales en C# no parece ayudar.

+0

¿Quieres una verdadera matriz multidimensional (en cuyo caso se necesitaría algo como 'nuevos [g.cols INT, g.rows ] ') o una matriz de matrices (en cuyo caso necesitarías algo como' new int [] [g.cols] 'seguido de un bucle)? –

+0

Necesito una verdadera matriz multidimensional. – Vaheh

Respuesta

33

El compilador de C# cree que está tratando de declarar un jagged array, y hacerlo incorrectamente. Una matriz dentada es una matriz de matrices, donde cada matriz contenida dentro de la matriz principal puede tener un número diferente de elementos. Una matriz escalonada se declara como sigue:

int[][] jaggedArray = new int[numElements][]; 

lo que crearía una matriz que podría contener "numElements" conjuntos de números enteros dentro de ella.

desea declarar un multidimensional array, por ejemplo:

int[,] grid = new int[g.cols, g.rows]; 
+0

Gracias por la respuesta. Sin embargo, esto parece romper otro método que tengo en otro lugar. He anidado bucles para iterar a través de la matriz de dos dimensiones. for (int y = 0; y Vaheh

+5

Puede usar grid.GetLength (0) para la primera dimensión (x) y grid.GetLength (1) para la segunda (y) – TheEvilPenguin

+0

Gracias, esto funciona a la perfección. – Vaheh

2
public int[][] getConvergenceCounts(MandelbrotGrid g){ 
    int[][] grid=new int[g.cols][]; 

    for(int x=0;x<g.cols;x++){ 
    int[x] = new int[g.rows] 
    for(int y=0;y<g.rows;y++){ 
     double tx=x*(double)3/400-1.5; 
     double ty=y*(double)3/400-1.5; 
     grid[x][y]=getConvergenceCount(new Complex(ty,tx)); 
    } 
    } 

    return grid; 
} 
Cuestiones relacionadas