Mais um java.lang.NullPointerException

8 respostas
ThePianist

Galera, boa noite.

Seguinte: Estou iniciando com Java e OO. To tentando criar um programinha que receba nome, peso e altura de 2 pessoas e retorne o nome da mais alta e da mais pesada.

Depois que criei o array na classe abaixo, comecei a ter problema de java.lang.NullPointerException . Dei uma pesquisada aqui no fórum, através das dezenas de erros semelhantes, mas a verdade é que conceitualmente não entendi o que gera esse tipo de erro ainda.

Eis o código:
public class Pessoa{
	
	private String nome[]; 
	private Float altura[] , peso[];
	
		
	public void Dados(){
		for(int i=0; i<2 ; i++){ 	
		Scanner n= new Scanner(System.in);
    	[u]System.out.println("Nome da pessoa: " +nome[i]);[/u]
    	n.nextLine();
    	
    	Scanner a= new Scanner(System.in);
    	System.out.println("Altura da pessoa: " +altura[i]);
        a.nextFloat();
      
    	Scanner pe= new Scanner(System.in);
    	System.out.println("Peso da pessoa: "+peso[i]);
    	pe.nextFloat();
	}
       }	 
     }
E também na classe main:
public class Main {
	
	 public static void main(String [] args){
		 Pessoa p;
         p = new Pessoa (); 
         p.Dados();
       } 
		 
	 }

O Eclipse aponta o erro em :

Exception in thread "main" java.lang.NullPointerException
at Pessoa.Dados(Pessoa.java:15)
at Main.main(Main.java:7)

Como eu disse anteriormente, o erro surgiu na hora de criar o array. Alguém poderia ajudar ?

Vlw !!

8 Respostas

altitdb

Tente

private String nome[] = new String[x];   
private Float altura[] = new Float[x];
private Float peso[] = new Float[x];

Onde x é o tamanho do Array.

xD~~

ThePianist

Vlw , cara !! Funcionou.

Na verdade, o Eclipse implicou e sugeriu q fosse feito dessa forma q tu falou mas com os colchetes ao lado. Tipo :

private String[] nome = new String[20]; private Float[] altura = new Float[20]; private Float[] peso= new Float[20];

Vlw msm ! Mas tipo, nesse meu caso, o erro deu por que eu não dimensionei os vetores ?

altitdb

Voce precisa determinar um tamanho para um Array antes de usa-lo.

Lembrando que não só Arrays mais todos os outros demais objetos.

xD~~

ThePianist

Saquei. Isso é lógica básica né eheh :oops: Vlw, obrigado !! :wink:

aluisiodsv

Ao instanciar qualquer objeto, vc tem q fazer alguma referência para um objeto na memória, sendo criando um novo ou atribuindo a algum existente.
Se a variável não estiver ligada a nada, quer dizer q ela é null.
e se ela é null, qualquer método ou propriedade q tentar chamar dela é lançado uma Exceção do tipo NullPointerException.

ThePianist

Ao instanciar qualquer objeto, vc tem q fazer alguma referência para um objeto na memória, sendo criando um novo ou atribuindo a algum existente.
Se a variável não estiver ligada a nada, quer dizer q ela é null.
e se ela é null, qualquer método ou propriedade q tentar chamar dela é lançado uma Exceção do tipo NullPointerException

Galera, eu confesso a vcs que isso ainda não esta muito claro pra mim. Por mais que eu leia , esse conceito ainda tam eio confuso.

Essa referência , no meu caso, teria sido indicar quais os tamanhos dos respectivos vetores ?

aluisiodsv

Instanciar variável:

/*
Cria uma nova instância na memória da variável x com o tipo Objeto
*/
Objeto x = new Objeto();
/*
Atribui à x a mesma referência na memória da variável y,
lembrando que eles devem ser do tipo Objeto.
Se a variável y mudar alguma coisa, a x tbm vai mudar,
pois na memória são a mesma coisa.
*/
Objeto x = y;

Caso nenhuma dessas duas opções tenha sido feita, essa variável estará null. Ou seja, nada na memória do computador tem algum valor pra ela.
Neste caso, se vc chamar algum método ou propriedade desta variável ela vai dar o NullPointerException

ThePianist

Obrigado aluisiodsv e altidb !! :smiley:

Criado 11 de março de 2011
Ultima resposta 12 de mar. de 2011
Respostas 8
Participantes 3