Loop na diagonal através de uma matriz Java 2D
1. Visão geral
Neste tutorial, veremos como fazer um loop diagonal através de uma matriz bidimensional. A solução que fornecemos pode ser usada para uma matriz bidimensional quadrada de qualquer tamanho.
2. Matriz bidimensional
A chave para trabalhar com elementos de uma matriz é saber como obter um elemento específico dessa matriz. Para uma matriz bidimensional, usamos índices de linha e coluna para obter elementos de uma matriz. Para este problema, usaremos o diagrama a seguir para mostrar como obter esses elementos.
Em seguida, precisamos entender quantas linhas diagonais temos em nossa matriz, como visto no diagrama. Fazemos isso primeiro obtendo o comprimento de uma dimensão da matriz e, em seguida, usando-o para obter o número de linhas diagonais (diagonalLines).
Em seguida, usamos o número de linhas diagonais para obter o ponto médio, o que ajudará na pesquisa de índices de linha e coluna.
Neste exemplo, o ponto médio é três:
int length = twoDArray.length
int diagonalLines = (length + length) - 1
int midPoint = (diagonalLines / 2) + 1
3. Obtendo índices de linha e coluna
Para percorrer todo o array, começamos o loop de 1 até que a variável do loop seja menor ou igual à variáveldiagonalLines.
for (int i = 1; i <= diagonalLines; i++) {
// some operations
}
Vamos também apresentar a ideia do número de itens em uma linha diagonal, chamando-o deitemsInDiagonal. Por exemplo, a linha 3 no diagrama acima possui 3 itens (g, e, c) e a linha 4 possui 2 (h, f). Esta variável é incrementada em 1 no loop quando a variável do loopi é menor ou igual amidPoint. Em seguida, é decrementado por 1 caso contrário.
Depois de aumentar ou diminuiritemsInDiagonal,, temos um novo loop com a variável de loopj. A variávelj é incrementada de 0 até ser inferior aitemsInDiagonal.
Em seguida, usamos as variáveis de loopi andj para obter os índices de linha e coluna. A lógica desse cálculo depende se a variável de loopi é maior quemidPoint ou não. Quandoi é maior quemidPoint, também usamos a variávellength para determinar os índices de linha e coluna:
int rowIndex;
int columnIndex;
if (i <= midPoint) {
itemsInDiagonal++;
for (int j = 0; j < itemsInDiagonal; j++) {
rowIndex = (i - j) - 1;
columnIndex = j;
items.append(twoDArray[rowIndex][columnIndex]);
}
} else {
itemsInDiagonal--;
for (int j = 0; j < itemsInDiagonal; j++) {
rowIndex = (length - 1) - j;
columnIndex = (i - length) + j;
items.append(twoDArray[rowIndex][columnIndex]);
}
}
4. Conclusão
Neste tutorial, mostramos como fazer um loop diagonal em uma matriz quadrada bidimensional usando um método que ajuda na obtenção de índices de linha e coluna.
Como sempre, o código-fonte completo do exemplo está disponívelover on GitHub.