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.
S
Semprelegit
Esse erro na “Principal 2” era porque eu esqueci de colocar o mat.lenght-1 dentro do for
Esse erro que eu mostrei é da “secundária”
D
darlan_machado
Mesma coisa
S
Semprelegit
Essa é a matriz 3x3:
0 1 2 1 2 3
0 1 2 —> 1 2 3
0 1 2 1 2 3
Aqui ele imprime o número que está na posição 0,2 sendo i = 0, ou seja, o 3
System.out.print(mat[i][i + 2] + " - " + "[" + a + ", " + a + 2);
Aparenta que o erro está aqui, pois a partir daqui ele não imprime
Tamanho:3123123123=====MATRIZ=====123123123=====PRINCIPAL=====1-[1,1]2-[2,2]3-[3,3]=====PRINCIPAL2°=====2-[1,1]3-[2,2]=====SECUNDÁRIA=====3-[0,02// O erro ocorre no próximo número
D
darlan_machado
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
No primeiro Sysout i = 0
Segundo i = 1
Terceiro i = 2
Quando ele executa o for, automaticamente ocorre o i++?
D
darlan_machado
Sim.
i = 1
1 + 2 = 3
Aí está teu erro, fera.
S
Semprelegit
Quando eu coloco -1 em um dos dois i, ainda dá erro
System.out.print(mat[i][i-1] + " - " + "[" + a + 1 + ", " + a + 1);
ou
System.out.print(mat[i-1][i] + " - " + "[" + a + 1 + ", " + a + 1);
D
darlan_machado
Você inicia o laço setando i = 0. 0 - 1 = -1
Assim sendo, você tenta acessar a posição -1 da linha ou coluna. Por isso o erro.
S
Semprelegit
Não entendi isso
D
darlan_machado
Cara, de novo.
Faça o teste de mesa, coloque os valores que quiser. Só assim você vai conseguir ver que está errando em coisa pequena
S
Semprelegit
Coloquei ele e deu erro
D
darlan_machado
Sim, cara, desde aqui
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.
Agora, vamos tentar esclarecer:
Índice:|0|1|2|3|4|Valor:|3|5|7|9|0|
Me diga, qual o tamanho deste vetor?
Qual o valor no índice 3? E qual o valor no índice 1? E qual o valor no índice 5?
D
darlan_machado
Errado. Este vetor não possui um índice 5. Então, é um IndexOutOfBoundsException
S
Semprelegit
Eu disse 0 porquê ele não existe
D
darlan_machado
Cara, existe diferença entre 0, nulo e não existe.
Você precisa considerar a maneira como o java lida com tais situações e, neste caso, a exceção será lançada assim que for identificado que há uma tentativa de acessar uma posição/índice inexistente no vetor/matriz
S
Semprelegit
Mas me explica, onde exatamente eu tenho que mudar para solucionar isso?
S
Semprelegit
Eu entendi agora, quando eu usei mat.lenght - 1 o vetor virou 2, ou seja 0 e 1 né?
D
darlan_machado
Você só pode iterar nas linhas e colunas que estão dentro do limite de tamanho da matriz. Se a matriz tem ordem 3x3, você só pode ir de 0 a 2.
Qualquer tentativa de acessar posições fora desse intervalo, vai disparar erro.
S
Semprelegit
Eu alterei algumas coisas e ainda não deu certo. A matriz 3x3 que o Java faz é essa?
0,0 0,1 0,2
0,0 0,1 0,2
0,0 0,1 0,2
Ou essa
0,0 0,1 0,2
1,0 1,1 1,2
2,0 2,1 2,2
D
darlan_machado
Sempre será da esquerda para a direita, de cima para baixo, logo, é a segunda