2011-09-09 19 views
39

¿Cómo obtengo la segunda dimensión de un conjunto si no lo sé? array.length da solo la primera dimensión.Obtener la longitud del conjunto bidimensional

Por ejemplo, en

public class B { 
    public static void main(String [] main){ 
     int [] [] nir = new int [2] [3]; 
     System.out.println(nir.length); 
    } 
} 

¿cómo puedo obtener el valor de la segunda dimensión de nir, que es 3.

Gracias

Respuesta

81

cuales 3?

Has creado una matriz multidimensional. nir es una matriz de matrices en int; tienes dos arreglos de longitud tres.

System.out.println(nir[0].length); 

le daría la longitud de su primer conjunto.

También vale la pena señalar que no tiene que inicializar una matriz multidimensional como lo hizo, lo que significa que todas las matrices no tienen que tener la misma longitud (o existir).

int nir[][] = new int[5][]; 
nir[0] = new int[5]; 
nir[1] = new int[3]; 
System.out.println(nir[0].length); // 5 
System.out.println(nir[1].length); // 3 
System.out.println(nir[2].length); // Null pointer exception 
+6

+1 especialmente para el peligroso consejos sobre lo no rectangular (y con eso me refiero a que es peligroso hacer suposiciones sobre sus datos, no es peligroso usar elementos no rectangulares). Eso ha engañado a muchos programadores novatos, y ha hecho el ridículo a muchos programadores no principiantes que deberían haberlo sabido. – corsiKa

+2

así que esencialmente el '3' en' int [] [] nir = new int [2] [3]; 'es ficticio (sin uso práctico). ¿¿¿Derecha??? o se usa para asignar 3 celdas en cada fila - valor predeterminado no. de cols en cada fila? – KNU

+0

@KNU si usa esa sintaxis que define explícitamente que la segunda dimensión es 3 ... entonces obtiene esa longitud para cada matriz. La segunda parte de mi respuesta es simplemente señalar que no tienes que usar esa sintaxis. –

2
int secondDimensionSize = nir[0].length; 

Cada elemento de la primera dimensión es en realidad otra matriz con la longitud de la segunda dimensión.

+0

Sí, no pude pensar así. muchas gracias. – Numerator

6

que puede hacer:

System.out.println(nir[0].length); 

Pero tenga en cuenta que no hay ninguna matriz bidimensional real en Java. Cada matriz de "primer nivel" contiene otra matriz. Cada una de estas matrices puede ser de diferentes tamaños. nir[0].length no es necesariamente del mismo tamaño que nir[1].length.

Puede echar un vistazo a http://anh.cs.luc.edu/170/notes/2dArrays/ar2.html que tienen una buena imagen para mostrar eso.

1
nir[0].length 

Nota 0: Debe tener un mínimo de una matriz en la matriz.
Nota 1: No todas las sub-matrices no son necesarias con la misma longitud.

1

Suponiendo que la longitud es la misma para cada matriz en la segunda dimensión, puede utilizar

public class B {  
public static void main(String [] main){ 
    int [] [] nir= new int [2] [3]; 
    System.out.println(nir[0].length); 
} 
} 
3

uso

System.out.print(nir[0].length); 

vistazo a este bucle for que imprimir el contenido de la matriz 2 dimensión la segunda iteración del bucle sobre la columna en cada fila

for(int row =0 ; row < ntr.length; ++row) 
for(int column =0; column<ntr[row].length;++column) 
    System.out.print(ntr[row][column]); 
+0

Tenga en cuenta que esto puede arrojar una excepción de puntero nulo si no se ha creado la segunda matriz de dimensión; debería verificar 'ntr [fila]! = null' antes de imprimir. –

0

remembe r, 2D array no es 2D array en sentido real. Cada elemento de una matriz en sí mismo es una matriz, no necesariamente del mismo tamaño. entonces, nir[0].length puede o no ser igual a nir[1].lengthonir[2]length.

Espero que ayude ..:)

0

de expansión para matriz multi-dimensión de longitud total,

general para su caso, ya que la forma de la matriz 2D es "cuadrado".

int length = nir.length * nir[0].length; 

Sin embargo, para la matriz 2D, cada fila puede no tener exactamente la misma cantidad de elementos. Por lo tanto, necesitamos atravesar cada fila y agregar el número de elementos.

int length = 0; 
for (int lvl = 0; lvl < _levels.length; lvl++) 
{ 
    length += _levels[ lvl ].length; 
} 

Si N-D array, lo que significa que necesitamos N-1 para el bucle para obtener el tamaño de cada fila.

2

Aquí hay una solución completa a la forma de enumerar elementos en un dentado matriz bidimensional (con 3 filas y 3 a 5 columnas):

String row = ""; 
    int[][] myArray = {{11, 12, 13}, {14, 15, 16, 17}, {18, 19, 20, 21, 22}}; 
    for (int i=0; i<myArray.length; i++) { 
     row+="\n"; 
     for (int j = 0; j<myArray[i].length; j++) { 
      row += myArray[i][j] + " "; 
     } 
    } 
    JOptionPane.showMessageDialog(null, "myArray contains:" + row); 

Jagged array's contents

Cuestiones relacionadas