Eu executo uma matriz 3x3
Quando ele imprime a Diagonal secundária da esse erro:
java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at Matrizes.Main.main(Main.java:47)
at java.lang.reflect.Method.invoke(Native Method)
at com.duy.android.compiler.java.Java.run(Java.java:115)
at com.duy.ide.javaide.run.activities.ExecuteActivity.executeDex(ExecuteActivity.java:147)
at com.duy.ide.javaide.run.activities.ExecuteActivity.exec(ExecuteActivity.java:124)
at com.duy.ide.javaide.run.activities.ExecuteActivity.access$100(ExecuteActivity.java:45)
at com.duy.ide.javaide.run.activities.ExecuteActivity$1.run(ExecuteActivity.java:88)
at java.lang.Thread.run(Thread.java:764)
Essa exceção indica que você está tentando acessar uma posição que não existe. Exemplo:
int[] vetor = new int[5];
System.out.println(vetor[5]);
Como o vetor possui tamanho 5 e o primeiro índice é zero, é impossível acessar a posição 5 do vetor (afinal, as “casas” dele vão de 0 a 4).
O erro, provavelmente, seja nesta linha.
Cara, a questão das matrizes e/ou vetores é: você só acessa as “casas” a partir do índice 0 até o índice N onde N = tamanho do vetor - 1.
Se a matriz é de ordem 3x3, você nunca vai poder acessar posições cujo índice da linha ou coluna seja maior que 2.
Dado que 1 + 2 = 3, esta linha
System.out.print(mat[i][i + 2] + " - " + "[" + a + ", " + a + 2);
Eu estou falando a mesma coisa, de modos diferentes e você não quer aceitar.
Se você tem um vetor de 10 posições, a posição com maior índice que pode ser acessada é a 9. Nem 10, nem 11, nem 15.
O mesmo vale para matrizes. Uma matriz pode ser entendida como um conjunto de vetores. Muitas das vezes trabalhamos com a ideia de que elas são quadradas, ou seja, a mesma quantidade de linhas e colunas. Mais ainda: consideramos que as matrizes possuem dimensões iguais, ou seja, cada linha possui a mesma quantidade de colunas.
Para fins de estudo e entendimento, essas simplificações são válidas. Para o mundo real, nem sempre.