[RESOLVIDO] ArrayIndexOutOfBounds em uma matriz de objetos

11 respostas Resolvido
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:

String[][] mat = new String[3][];
	mat[0] = new String[5];
	mat[1] = null;
	mat[2] = new String[5];
	
	for(int i = 0; i < mat.length; i++) {
		for(int j = 0; j < mat[i].length; j++) {
			if(i < 1 || i > 1) {
				mat[i][j] = new String("asd");
			}
		}
	}

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!

11 Respostas

darlan_machado

Isso nem rodaria por conta das linhas acima. NPE na linha do segundo for
Tem certeza que o código é esse mesmo?

A

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 :confused:
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! :blush:

A

Sim.
mat[1] = new String[0];

darlan_machado
Solucao aceita

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

int vetor[] = new int[0];

É completamente sem sentido.
Como vai fazer

int[0] = 10; //Aí sim o ArrayIndexOutOfBoundsException
A

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’.

Criado 9 de agosto de 2018
Ultima resposta 9 de ago. de 2018
Respostas 11
Participantes 3