Como verificar se a posição do array está vazia?

Bom dia pessoal,

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

Ola

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

faz sentido né?

2 curtidas

vlw mestre, resolveu o problema de todas as formas.
muito obrigado!!!

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.