public class Question14 {
public static void main(String[] args) {
A13[] a1 = new A13[1]; // 1
A13[][] a2 = new A13[2][1]; // 2
A13[][][] a3 = new A13[3][3][3];// 3
System.out.print(a3[2][2][2]); // 4
a1[0] = new A13(); // 5
a2[0] = a2[1] = a1; // 6
a3[0] = a3[1] = a3[2] = a2; // 7
System.out.print(a3[2][2][2]); //8
}
}
Se eu comentar a linha Linha 8, o resultado sairia null. Se eu tirar o comentário, o resultado é um erro em tempo de excução: nullException in thread “main” java.lang.ArrayIndexOutOfBoundsException: 2 at Question14.main(Question14.java:12).
Por que na linha 4 o o item a3[2][2][2] é null e na linha 8 o mesmo item gera um erro?
A sua array a3 tem 3 elementos, que você inicializa com a2.
a3 { a2, a2, a2 }
O a2, por sua vez, tem 2 elementos, que são o a1:
a2 { a1, a1 }
Logo, você tem
a3 { {a1, a1}, {a1, a1 }, { a1, a1 }}
Quando acessa a3[2][2][2], está tentando acessar:
1 - a3[2] -> 3o. (terceiro) elemento de a3: {a1, a1}
2 - a3[2][2] -> 3o. (terceiro) elemento do resultado acima, o que dá null, pois só existem 2 elementos!
Você está atribuindo às 3 dimensões principais de a3, arrays de dimensão diferente. Veja que, independentemente do momento em que você instancia o array, se você atribuir valor a ele com um outro array de tamanho diferente, ele fica com o novo tamanho.
Você está a instânciar a1 com 1 só dimensão(0), a2 com 2(0,1) e a3 com três(0,1,2).
Quando você chama a3[2][2][2] , estas a chamar a3[2](até aqui ok, você tem instanciado um objeto aqui, mesmo que ele seja nulo), logo depois você chama [2] desse objeto e é aí que começa o problema. Lembra que instanciaste a2 com 2 posições(0 e 1)? Quando chamas a posição 3([2]) não há índice colocado para essa array, fazendo que lance a exceção : ArrayIndexOutOfBoundsException(IndiceDaArrayForaDosLimites). Mesmo que você fale que a array tem [3][3][3], se você iniciá-la com menos índices, gerará esse erro. Sei que ficou meio confuso, mas torne a perguntar o que não entendeu.
Você está a instânciar a1 com 1 só dimensão(0), a2 com 2(0,1) e a3 com três(0,1,2).
Quando você chama a3[2][2][2] , estas a chamar a3[2](até aqui ok, você tem instanciado um objeto aqui, mesmo que ele seja nulo), logo depois você chama [2] desse objeto e é aí que começa o problema. Lembra que instanciaste a2 com 2 posições(0 e 1)? Quando chamas a posição 3([2]) não há índice colocado para essa array, fazendo que lance a exceção : ArrayIndexOutOfBoundsException(IndiceDaArrayForaDosLimites). Mesmo que você fale que a array tem [3][3][3], se você iniciá-la com menos índices, gerará esse erro. Sei que ficou meio confuso, mas torne a perguntar o que não entendeu.