Erro Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 para matriz de arraylist

Boa tarde!

Tenho o seguinte método abaixo que cria uma matriz a partir de elementos de um ArrayList (2 inteiros e 1 string):

private ArrayList alunos = new ArrayList ();
String [][] matriz = new String [alunos.size()][3];

public void criarMatriz() {
if (alunos.size() == 0) {
System.out.print("\nNão há alunos cadastrados!\n\n");
}
else {
for (int i = 0; i < alunos.size(); i++) {
for (int j = 0; j < 3; j++) {
matriz [i][j] = Integer.toString(alunos.get(i).getMatricula());
matriz [i][j] = alunos.get(i).getNome();
matriz [i][j] = Integer.toString(alunos.get(i).getCurso());
}
}
}
}

Entretanto, ao compilar, o erro Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0 aparece. Alguém poderia ajudar?

Ao compilar não, ao executar.

Sua matriz bidimensional tem tamanho 0 na primeira dimensão, então vai dar ArrayIndexOutOfBoundsException ao tentar acessar alguma posição.

1 curtida

Oh, desculpe pelo erro entre compilar e executar.

Poderia me explanar melhor sobre o tamanho 0 na primeira dimensão?

// aqui você declarou e inicializou um ArrayList, o mesmo está vazio
private ArrayList alunos = new ArrayList ();

// na linha sequinte você declara e inicializa um array bidimensional de String
// passando o tamanho do ArrayList para inicializar a primeira dimensão
//  como o ArrayList está vazio, a primeira dimensão tem tamanho 0
String [][] matriz = new String [alunos.size()][3];
2 curtidas

Você provavelmente está chamando a função cria matriz depois de ter inserido algum valor em alunos. Como o staroski disse você ta definindo a String[][] matriz quando alunos.size() é zero, e está tentando inserir elementos quando alunos.size() > 0, isso que está causando o erro. Uma solução é você instanciar a matriz na hora que chamar o método criaMatriz, até lá deixe matriz como NULL.

1 curtida

Entendido! Consegui resolver o problema. Muito obrigado ao leonardodias914 e ao staroski pela ajuda!

1 curtida