Loop na diagonal através de uma matriz Java 2D

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.

image

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 loop é 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ável é incrementada de 0 até ser inferior aitemsInDiagonal.

Em seguida, usamos as variáveis ​​de loopandj 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. Quando é 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.