Estou começando em Java agora e estou com dificuldade para verificar se a posição do meu array está vazia, estou comparando assim, this.porta[i] == null mas só funciona na primeira iteração do loop acredito que dessa forma verificar se todo o array está vazio, na segunda ele já não funciona, fiz algumas pesquisas e vi que posso utilizar isEmpty() mas tbm sem sucesso, quem puder tirar minha duvida ficou agradecido. Segue essa parte do código abaixo.
public void adicionarPorta(Porta p){
for (int i = 0; i < this.portas.length; i++ ) {
if ( this.porta[i] == null) {
this.porta[i] = p;
}
}
}
vamos la, um array é uma coleção de dados. se ele é um array de tipos primitivos, ele vai ser inicializado, salvo engano, com o valor padrão ( tipo 0 no caso de inteiros ) caso vc crie apenas com new sem especificar os valores na hora de criar.
mas caso o tipo seja Object e seus descendentes ( ou seja, qq objeto ), então sera null e vc pode fazer esta comparação. ponto pra vc.
Agora o que aconteceu no seu loop é: vc procura pelo null, encontrou, adicionou. e vc deveria terminar o loop apos adicionar p.
como fazer ? simples, adiciona um break; apos adicionar p. isso vai interromper o loop de maneira suave.
vc tb pode colocar um return; que vai interromper o metodo todo. agora tem um detalhe que vc tem que pensar: e se vc não conseguir adicionar a porta?
meu conselho: ao inves de void, retorne um inteiro, i no caso ( a posicao aonde vc adicionou ). e retorne -1 se nao conseguir adicionar. assim vc pode fazer
public int adicionarPorta(Porta p){
for (int i = 0; i < this.portas.length; i++ ) {
if ( this.porta[i] == null) {
this.porta[i] = p;
return i;
}
}
return -1; /* ou lance exception mas se vc chegar aqui usando return, significa que vc nao adicionou a porta pois ta tudo cheio*/
}
sabe o que é melhor ainda? armazena i!
private int fim = 0;
public void adicionarPorta(Porta p){
if ( fim < portas.length ) {
porta[ fim ] = p; fim++;
} else {
// vetor cheio. deu ruim
}
}
O problema é que ele itera por todo o array e preenche todos que estão vazios com Porta p. Nas outras iterações ele está todo preenchido, não há lugar onde coloca-lo.