Quando estamos nas aulas iniciais de programação, aprendemos a iterar sobre vetores e matrizes, sendo que no segundo caso é necessário criar um loop (for, while e etc) para cada dimensão de nossa matriz. Desta forma criamos muitas vezes um código com vários níveis de aninhamento no nosso código.

Uma outra forma de lidar com isto é criando uma forma de a partir de um único índice extrair o valores dos sub-índices, uma tarefa simples se utilizarmos módulo.

Como podemos ver no código abaixo, iteramos sobre um vetor primeiro extraindo o índice do vetor interior e logo na sequência extraímos o índice do vetor principal. Iteramos duas vezes (distintas), uma para preencher os valores e a outra para imprimir os valores. Tudo muito simples e com apenas uma variável.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public static void matriz() {
  int [][] vetor = new int[5][5];
  int tamanhoVetor = vetor.length;
  int tamanhoSubVetor = vetor[1].length;
  int tamanho = tamanhoVetor * tamanhoSubVetor;
  
  for(int i = 0; i < tamanho; i++) {
    int indiceDoSubvetor = i % tamanhoVetor;
    int indiceDoVetor = (i - indiceDoSubvetor) / tamanhoSubVetor;
    System.out.println("Vetor: " + indiceDoVetor + " Subvetor: " + indiceDoSubvetor);
    vetor[indiceDoVetor][indiceDoSubvetor] = i;
  }
  
  for(int i = 0; i < tamanho; i++) {
    int indiceDoSubvetor = i % tamanhoSubVetor;
    int indiceDoVetor = (i - indiceDoSubvetor) / tamanhoVetor;
    System.out.println(vetor[indiceDoVetor][indiceDoSubvetor]);
  }
}