2010-10-22 17 views
72

Necesito obtener la longitud de una matriz 2D para la fila y la columna. Lo he hecho con éxito, utilizando el siguiente código:Obtener la longitud de la matriz de una matriz 2D en Java

public class MyClass { 

public static void main(String args[]) 
    { 
    int[][] test; 
    test = new int[5][10]; 

    int row = test.length; 
    int col = test[0].length; 

    System.out.println(row); 
    System.out.println(col); 
    } 
} 

Esto imprime 5, 10 como se esperaba.

Ahora echar un vistazo a esta línea:

int col = test[0].length; 

en cuenta que en realidad tengo para hacer referencia a una fila en particular, con el fin de obtener la longitud de la columna. Para mí, esto parece increíblemente feo. Además, si se define la matriz como:

test = new int[0][10]; 

continuación, el código podría fallar al intentar conseguir la longitud. ¿Hay alguna manera diferente (más inteligente) de hacer esto?

Respuesta

97

Considérese

public static void main(String[] args) { 

    int[][] foo = new int[][] { 
     new int[] { 1, 2, 3 }, 
     new int[] { 1, 2, 3, 4}, 
    }; 

    System.out.println(foo.length); //2 
    System.out.println(foo[0].length); //3 
    System.out.println(foo[1].length); //4 
} 

longitudes de columna difieren por fila. Si está respaldando algunos datos mediante una matriz 2D de tamaño fijo, proporcione getters a los valores fijos en una clase contenedora.

+0

Pregunta no relacionada sobre su respuesta. ¿Cómo se llama la técnica/método en el que pones "{...};" después de la definición del objeto. Como nuevo desarrollador, sigo viendo esto cada vez más. – user432209

+0

Bueno, lo entiendo mucho :). Solo pensé que podría haber un nombre específico para la técnica. – user432209

+0

No estoy seguro de su nombre - ¿Inicialización del objeto? inicialización en línea? uno de nuestros Java Gurus sabrá –

4

Java le permite crear "matrices irregulares" donde cada "fila" tiene diferentes longitudes. Si usted sabe que tiene una matriz cuadrada, se puede utilizar el código modificado para proteger contra una matriz vacía como esto:

if (row > 0) col = test[0].length; 
3

No hay una manera más limpia a nivel de lenguaje, porque no todas las matrices multidimensionales son rectangulares. A veces, las matrices dentadas (diferentes longitudes de columna) son necesarias.

Puede crear fácilmente su propia clase para abstraer la funcionalidad que necesita.

Si no está limitado a matrices, entonces quizás algunas de las diversas clases de colección también funcionarían, como un Multimap.

10

Una matriz 2D no es una cuadrícula rectangular. O tal vez mejor, no existe una matriz 2D en Java.

import java.util.Arrays; 

public class Main { 
    public static void main(String args[]) { 

    int[][] test; 
    test = new int[5][];//'2D array' 
    for (int i=0;i<test.length;i++) 
     test[i] = new int[i]; 

    System.out.println(Arrays.deepToString(test)); 

    Object[] test2; 
    test2 = new Object[5];//array of objects 
    for (int i=0;i<test2.length;i++) 
     test2[i] = new int[i];//array is a object too 

    System.out.println(Arrays.deepToString(test2)); 
    } 
} 

Salidas

[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]] 
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]] 

Los arrays test y test2 son (más o menos) la misma.

1

probar este siguiente programa de matriz 2D en Java:

public class ArrayTwo2 { 
    public static void main(String[] args) throws IOException,NumberFormatException{ 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     int[][] a; 
     int sum=0; 
     a=new int[3][2]; 
     System.out.println("Enter array with 5 elements"); 
     for(int i=0;i<a.length;i++) 
     { 
      for(int j=0;j<a[0].length;j++) 
      { 
      a[i][j]=Integer.parseInt(br.readLine()); 
      } 
     } 
     for(int i=0;i<a.length;i++) 
     { 
      for(int j=0;j<a[0].length;j++) 
      { 
      System.out.print(a[i][j]+" "); 
      sum=sum+a[i][j]; 
      } 
     System.out.println(); 
     //System.out.println("Array Sum: "+sum); 
     sum=0; 
     } 
    } 
} 
0
public class Array_2D { 
int arr[][]; 
public Array_2D() { 
    Random r=new Random(10); 
    arr = new int[5][10]; 
    for(int i=0;i<5;i++) 
    { 
     for(int j=0;j<10;j++) 
     { 
      arr[i][j]=(int)r.nextInt(10); 
     } 
    } 
} 
    public void display() 
    { 
     for(int i=0;i<5;i++) 

     { 
      for(int j=0;j<10;j++) 
      { 
       System.out.print(arr[i][j]+" "); 
      } 
      System.out.println(""); 
     } 
    } 
    public static void main(String[] args) { 
    Array_2D s=new Array_2D(); 
    s.display(); 
    } 
    } 
+1

esto no está relacionado con la pregunta –

0

Si usted tiene esta matriz:

String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}}, 
         {{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}}; 

usted puede hacer esto:

example.length; 

= 2

example[0].length; 

= 2

example[1].length; 

= 2

example[0][1].length; 

= 3

example[1][0].length; 

= 4

+0

Vi una respuesta similar antes, pero creo que es más fácil de entender con ejemplos. – Andy