[RESOLVIDO] ArrayIndexOutOfBounds em uma matriz de objetos

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!

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

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

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?

Você precisa definir quantos elementos esta dimensão conterá, como fez no primeiro e último

Para considerar String[1] como nulo devo definir 0 elementos então?

Já está nulo. Mas, se você não quer que tenha nada nesta dimensão, sim. Só que não existe sentido nisso.

Ok! Entendi. Muito obrigado! :blush:

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

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

Realmente não faz sentido mesmo sendo possível. Seria melhor ter um array[2][5].

Também achei meio desnecessário, mas o exercício em questão reitera a criação de um array nulo como "espaço’.