Necesito obtener la longitud de una matriz 2D tanto para la fila como para la columna. Lo hice con éxito, usando el siguiente código:
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 eche un vistazo a esta línea:
int col = test[0].length;
Tenga en cuenta que realmente tengo que hacer referencia a una fila en particular, para obtener la longitud de la columna. Para mí, esto me parece increíblemente feo. Además, si la matriz se definió como:
test = new int[0][10];
Entonces el código fallaría al intentar obtener la longitud. ¿Hay una manera diferente (más inteligente) de hacer esto?
java
arrays
multidimensional-array
user432209
fuente
fuente
Respuestas:
Considerar
Las longitudes de columna difieren por fila. Si está respaldando algunos datos mediante una matriz 2D de tamaño fijo, proporcione captadores a los valores fijos en una clase de contenedor.
fuente
Una matriz 2D no es una cuadrícula rectangular. O tal vez mejor, no existe una matriz 2D en Java.
Salidas
Las matrices
test
ytest2
son (más o menos) iguales.fuente
Fue muy difícil recordar eso
Comprendamos por qué esto es así y cómo podemos resolver esto cuando se nos presenta un problema de matriz. Del siguiente código podemos ver que filas = 4 y columnas = 3:
arr
tiene múltiples matrices, y estas matrices se pueden organizar de forma vertical para obtener el número de columnas. Para obtener el número de filas, necesitamos acceder a la primera matriz y considerar su longitud. En este caso, accedemos a [1, 1, 1, 1] y, por lo tanto, el número de filas = 4. Cuando se le presenta un problema en el que no puede ver la matriz, puede visualizar la matriz como un rectángulo con n X m dimensiones y concluimos que podemos obtener el número de filas accediendo a la primera matriz y luego a su longitud. El otro (arr.length
) es para las columnas.fuente
Java le permite crear "matrices desiguales" donde cada "fila" tiene diferentes longitudes. Si sabe que tiene una matriz cuadrada, puede usar su código modificado para protegerse contra una matriz vacía como esta:
fuente
Si tienes esta matriz:
Puedes hacerlo:
= 2
= 2
= 2
= 3
= 4
fuente
No hay una forma más limpia a nivel de lenguaje porque no todas las matrices multidimensionales son rectangulares. A veces son necesarias matrices irregulares (diferentes longitudes de columna).
Podría crear fácilmente su propia clase para abstraer la funcionalidad que necesita.
Si no está limitado a las matrices, quizás algunas de las diversas clases de colección también funcionarían, como un Multimap .
fuente
.length = número de filas / longitud de columna
[0] .length = número de columnas / longitud de fila
fuente
Pruebe este siguiente programa para la matriz 2D en Java:
fuente
fuente
Con
Java 8
, te permite hacer algo más elegante como este:fuente
fuente