Ajuda

Estou com dificuldades em resolver um problema no meu código, o código compila, mas ao correr dá 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

 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.

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…

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.

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);

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 ?

[quote=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 ?

[/quote]

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++; }