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.
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]);
}
}