Ajuda

6 respostas
C
Estou com dificuldades em resolver um problema no meu código, o código compila, mas ao correr  o erro Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 0

at Metropolitano.main(Metropolitano.java:37)

ou seja, na linha que diz lista[i] = new Utente(XPTO+i);

o meu objectivo é criar uma lista com objectos do tipo Utente e outra com objectos do tipo UtentePasse e depois percorrer essas listas, chamando os métodos a cada elemento.

Alguém me consegue ajudar ?
public static void main(String[] args){

_lt = new Metropolitano();

int i=0;

Utente lista[] = {};

UtentePasse lista1[] = {};

int id = (66%10);
while (i<8){
		lista[i] = new Utente("XPTO"+i);
		lista[i].obtemNome();
		lista[i].viaja(id);
		i++;
	}
	
	while (i>7 && i<13){
		lista1[i]= new UtentePasse("XPTO"+i);
		lista1[i].obtemNome();
		lista1[i].viaja(id);
		i++;
	}

Obrigado e cumprimentos

6 Respostas

T
Utente lista[] = {};
UtentePasse lista1[] = {};

O que você escreveu é equivalente a:

Utente lista[] = new Utente[0];
UtentePasse lista1[] = new UtentePasse[0];

ou seja, como o array tem 0 elementos, e arrays não aumentam sozinhos de tamanho, então você vai obter um ArrayIndexOutOfBoundsException com certeza. Dimensione seu array com algum valor grande, suficiente para seu teste, ou então (recomendado) use List<Utente> lista = new ArrayList<Utente>() e assim por diante. (Note que como um List não é um array você não pode usar a notação [] para acessar elementos.

Giulliano

Cara vc esta pegando uma excessão em seu código…ótimo…agora só falta vc ir atrás dessa excessão e descobrir o pq isso ocorre…

Mas vou te dar uma força…ArrayIndexOutOfBound significa que vc esta tentando acessar uma posição do array que não existe…

por exemplo criar um array de 4 posições e tentar acessar a posição 6…dá esse erro…

Marky.Vasconcelos

PS: Poste os códigos entre as tags [code ] e [/code ]
PS2: Quando for abrir um novo tópico escreva um assunto menos vago

E o erro está que quando você que você precisa indicar quantas posições vão ter sua Array

Então mude isso:

Utente lista[] = {};

UtentePasse lista1[] = {};
para algo como

Utente lista[] = new Utente[100];

UtentePasse lista1[] = new UtentePasse[100];

Onde 100 é quantas posições a Array vai ter.
Marky.Vasconcelos

Se quiser algo amis dinamico use Lists

Algumas diferenças:

Declaração:

//Array
Utente[] utentes = new Utente[10];
//List
List<Utente> list = new ArrayList<Utente>();

Colocar itens:

Utente t = new Utente();

//Array
utentes[0] = t;
//List
list.add(t));

Tamanho:

//Array
int tamanho = utentes.length;
//List
int tamanho = list.size();

Pegar um objeto

Utente t;

//Array
t = utentes[0];
//List
t = list.get(0);
C

Já atribui uma dimensão aos vectores e realmente, deixei de ter o erro, o problema agora é que ele não preenche o vector com os utentes com o while.

while (i<6){
lista[i] = new Utente("XPTO"+i);

O construtor do Utente recebe uma String nome, logo, com este código ele deveria colocar um utente em cada posição do vector… ou não ?

Marky.Vasconcelos

Claudio.R:
Já atribui uma dimensão aos vectores e realmente, deixei de ter o erro, o problema agora é que ele não preenche o vector com os utentes com o while.

while (i<6){
lista[i] = new Utente("XPTO"+i);

O construtor do Utente recebe uma String nome, logo, com este código ele deveria colocar um utente em cada posição do vector… ou não ?

Sim isso deveria preencher.
E já que você declarou um tamanho você pode fazer o while assim

int i = 0; while(i<lista.length){ lista[i] = new Utente("XPTO"+i); i++; }

Criado 22 de outubro de 2007
Ultima resposta 22 de out. de 2007
Respostas 6
Participantes 4