[RESOLVIDO] ArrayIndexOutOfBounds em uma matriz de objetos
11 respostasResolvido
javaexceptionarray
StrangLuv
Olá, venho por meio deste pedir auxílio em um tópico que creio não ter entendido muito bem. Sou relativamente novo em Java e estou resolvendo um exercício onde preciso criar uma matriz de objetos e em certos índices do array externo devo criar uma instância do objeto. Segue o código utilizando String como o “Objeto” a fim de ficar mais explícito/legível:
Pois então, não consigo entender o porquê de no for aninhado ocorrer a exception “ArrayIndexOutOfBounds”. Não consegui achar nenhum tópico relativo a isto no fórum, por isso peço uma “luz”. Desde já obrigado!
Isso nem rodaria por conta das linhas acima. NPE na linha do segundo for
Tem certeza que o código é esse mesmo?
A
AntonioSantos
Em seu código ocorre a exceção ‘NullPointerException’ e não ‘ArrayIndexOutOfBounds’.
Seu código está correto, porém o erro ocorre porque mat[1] é nulo. E quando, dentro do segundo ‘for’, tentar acessar mat[i].length, sendo ‘i’ a posição 1 do array, não será possível por não existir uma dimenssão criada para mat[1] .
StrangLuv
Sim
Também achei que daria algum problema ao declarar algo null e a partir disto forçar um loop. Para “contornar” eu poderia só tirar este null?
darlan_machado
Você precisa definir quantos elementos esta dimensão conterá, como fez no primeiro e último
StrangLuv
Para considerar String[1] como nulo devo definir 0 elementos então?
darlan_machado
Já está nulo. Mas, se você não quer que tenha nada nesta dimensão, sim. Só que não existe sentido nisso.
StrangLuv
Ok! Entendi. Muito obrigado!
A
AntonioSantos
Sim. mat[1] = new String[0];
Solucao aceita
darlan_machado
Por que não faz sentido definir um vetor como sendo capaz de contemplar 0 elementos?
Simples, se o objetivo de um vetor é ser abastecido por um número N de elementos, declarar e instanciar um vetor assim
intvetor[]=newint[0];
É completamente sem sentido.
Como vai fazer
int[0]=10;//Aí sim o ArrayIndexOutOfBoundsException
A
AntonioSantos
Realmente não faz sentido mesmo sendo possível. Seria melhor ter um array[2][5].
StrangLuv
Também achei meio desnecessário, mas o exercício em questão reitera a criação de um array nulo como "espaço’.