Problemas com null

4 respostas
alkmin

Olá pessoal!

Primeiro quero agradecer por diversas respostas que li aqui e me ajudaram muito.

Estou programando Java há muito pouco tempo (sei que muiiiiitos escrevem isso) e, gostaria de compartilhar uma dúvida que não encontro solução:

Eu estou fazendo um exercício onde preciso criar um método para remover elementos de uma lista. Não é permitido utilizar ArrayList, apenas Arrays.

O problema acontece quando eu adiciono um elemento null e tento remover um outro elemento qualquer (Integer, String).

Não estou conseguindo resolver essa situação. Poderiam me ajudar? Muito obrigado!

public void remove(Object o) {
		boolean verifica = false;

		if (o == null) {
			for (int i = 0; i < pos; i++) {
				if (lista[i] == o) {
					verifica = true;
					while (i < (pos - 1)) {
						lista[i] = lista[i + 1];
						i++;
					}
				}
			}

		} else {
			for (int i = 0; i < pos; i++) {
				if (lista[i].equals(o)) {
					verifica = true;
					while (i < (pos - 1)) {
						lista[i] = lista[i + 1];
						i++;
					}
				}
			}
		}

		if (verifica) {
			Object[] auxiliar = new Object[(pos - 1)];
			for (int i = 0; i < (pos - 1); i++) {
				auxiliar[i] = lista[i];
			}
			lista = auxiliar;
			tam--;
			pos--;
		}
	}

4 Respostas

pmlm

Se na lista tens um null, vai dar NullPointerExpection mesmo se o teu objecto não é null.

Para evitar isso muda a linha 17 para

if (o.equals(lista[i])) {
alkmin

pmlm:
Se na lista tens um null, vai dar NullPointerExpection mesmo se o teu objecto não é null.

Para evitar isso muda a linha 17 para

if (o.equals(lista[i])) {

Olá amigo! A mudança funcionou perfeitamente! Muito obrigado!

Se não for muito incomodo, poderia explicar por que dessa forma funciona e da outra apresenta erro?

Novamente, agradeço imensamente!

Abraços!

pmlm

Imagina os seguintes exemplos:

String a = null;
String b = "xyz";

if (a.equals(b)){
   // do Stuff
}
String a = null;
String b = "xyz";

if (b.equals(a)){
   // do Stuff
}

No primeiro caso estás a invocar o método equals sobre o objecto null e vai dar NullPointerException (que era o teu caso).
No segundo caso vai invocar o método sobre um objecto que não é null, sendo que o null é passado no argumento. Neste caso não dá qualquer erro.

alkmin

pmlm:
Imagina os seguintes exemplos:

String a = null;
String b = "xyz";

if (a.equals(b)){
   // do Stuff
}
String a = null;
String b = "xyz";

if (b.equals(a)){
   // do Stuff
}

No primeiro caso estás a invocar o método equals sobre o objecto null e vai dar NullPointerException (que era o teu caso).
No segundo caso vai invocar o método sobre um objecto que não é null, sendo que o null é passado no argumento. Neste caso não dá qualquer erro.

Compreendi perfeitamente!

Nossa! Me esclareceu muitas dúvidas de uma forma muito simples e didática.

Sei que para quem sabe, isso deve ser bobagem, mas no meu caso, foi um grande conhecimento adquirido!

Muito obrigado amigo!

Forte abraço!

Criado 1 de setembro de 2015
Ultima resposta 2 de set. de 2015
Respostas 4
Participantes 2