Preciso obter o comprimento de uma matriz 2D para a linha e a coluna. Fiz isso com sucesso, usando o seguinte 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);
}
}
Isso imprime 5, 10 conforme o esperado.
Agora dê uma olhada nesta linha:
int col = test[0].length;
Observe que eu realmente preciso fazer referência a uma linha específica para obter o comprimento da coluna. Para mim, isso parece incrivelmente feio. Além disso, se a matriz foi definida como:
test = new int[0][10];
Em seguida, o código falharia ao tentar obter o comprimento. Existe uma maneira diferente (mais inteligente) de fazer isso?
java
arrays
multidimensional-array
user432209
fonte
fonte
Respostas:
Considerar
Os comprimentos das colunas diferem por linha. Se você estiver fazendo backup de alguns dados por uma matriz 2D de tamanho fixo, forneça getters aos valores fixos em uma classe de wrapper.
fonte
Uma matriz 2D não é uma grade retangular. Ou talvez melhor, não existe uma matriz 2D em Java.
Saídas
As matrizes
test
etest2
são (mais ou menos) as mesmas.fonte
Foi muito difícil lembrar que
Vamos entender por que isso é assim e como podemos descobrir isso quando tivermos um problema de matriz. No código abaixo, podemos ver que linhas = 4 e colunas = 3:
arr
possui várias matrizes e essas matrizes podem ser organizadas de maneira vertical para obter o número de colunas. Para obter o número de linhas, precisamos acessar a primeira matriz e considerar seu comprimento. Nesse caso, acessamos [1, 1, 1, 1] e, portanto, o número de linhas = 4. Quando você recebe um problema em que não pode ver a matriz, pode visualizar a matriz como um retângulo com n X m dimensões e concluímos que podemos obter o número de linhas acessando a primeira matriz e depois o seu comprimento. O outro (arr.length
) é para as colunas.fonte
Java permite criar "matrizes irregulares" em que cada "linha" possui comprimentos diferentes. Se você sabe que possui uma matriz quadrada, pode usar seu código modificado para proteger contra uma matriz vazia como esta:
fonte
Se você possui esta matriz:
Você consegue fazer isso:
= 2
= 2
= 2
= 3
= 4
fonte
Não há uma maneira mais limpa no nível do idioma, porque nem todas as matrizes multidimensionais são retangulares. Às vezes, são necessárias matrizes irregulares (diferentes comprimentos de coluna).
Você pode criar facilmente sua própria classe para abstrair a funcionalidade necessária.
Se você não estiver limitado a matrizes, talvez algumas das várias classes de coleção funcionem também, como um Multimap .
fonte
.length = número de linhas / comprimento da coluna
[0] .length = número de colunas / comprimento da linha
fonte
Tente este programa a seguir para a matriz 2d em java:
fonte
fonte
Com
Java 8
, permita que você faça algo mais elegante como este:fonte
fonte