Ajude-me por favor...Erro: java.lang.NullPointerException

Oi…

Estou tentanto fazer uma agenda eletrônica e armazenando esses valores num vetor…ele não compila e “roda”…só que depois de eu informar o 1º nome e dar enter…ele dá o erro java.lang.NullPointerException…

Vou colocar o código e suas duas classes:

::Aqui é a classe main

[code]import java.util.Scanner;

public class MainAgendaEletronica {

public static void main(String args []){

AgendaEletronica[] ae = new AgendaEletronica[5];

Scanner ler = new Scanner(System.in);

for (int i=0;i<5;i++){

   	System.out.println("Informe o nome");
   	String nome=ler.next();
   	ae[i].setNome(nome);
}

for(int i=0;i<5;i++){ 	

   System.out.println("o Nome é: "+ae[i].getNome());

}

}

}[/code]

:: Agora a Classe “modelo”, como vcs quiserem chamar…

[code]public class AgendaEletronica {

private String nome;

// private String telefone;

public String getNome(){
	
	return this.nome;
}

public void setNome(String nome){
	
	this.nome=nome;
	
}

/* public String getTelefone(){

	return this.telefone;
}

public void settelefone(String telefone){
	
	this.telefone=telefone;
}*/

}[/code]

Valeu pela atenção gente… :slight_smile:

Oi, o problema é o seguinte, quando você cria um array (seja ele de objetos ou de tipos primitivos como int por exemplo) eles possuem o valor padrão, que para objetos é null e para tipos primitivos é 0.

No teu caso, antes de usar qualquer posição do teu array, você deve inicializar o objeto que está naquela posição

Resumindo

        ae[i] = new AgendaEletronica();
        ae[i].setNome(nome); 

Bom era isso!

Valeu pela ajuda! Funcionou!!! :smiley:

Então toda vez, que eu for usar um vetor eu terei que inicializá-lo, né?!

Essa forma seria para iniciar um objeto…se fosse primitivo eu teria q colocar o valor diretamente…?!

Assim jogar o valor direto…

ex: vet[0]=5;

[quote=karolynareis]Valeu pela ajuda! Funcionou!!! :smiley:

Então toda vez, que eu for usar um vetor eu terei que inicializá-lo, né?!

Essa forma seria para iniciar um objeto…se fosse primitivo eu teria q colocar o valor diretamente…?!

Assim jogar o valor direto…

ex: vet[0]=5;[/quote]
Olá, tudo bom?

Então, quando vc cria um vetor de tipor primitivos, por exemplo int, é só fazer assim:

int[] vet = new int[5];

Ele já seta todas as posições do vetor com 0. Daí não precisa setar todas as posições uma a uma. Imagina se fossem 200 posições :shock: , a menos é claro que vc utilize uma estrutura de repetição, mas isso seria horrível :wink:

Abraço

Ah sim…eu fiquei imaginando como seria isso msm…uma a uma…iria dar uma dor de cabeça… :wink:

Obrigada pela ajuda… :smiley:

Só para constar! Se fosse 200 posições e você quiser inicializá-lo com um valor diferente de 0 é só fazer o seguinte

public static void main(String[] args) { int[] i = new int[200]; Arrays.fill(i, 10); }

Bom…eu entendi…mas fiquei confusa com uma coisa…

Depois da grande ajuda de vcs, consegui fazer aquela agenda funcionar… :smiley:

E resolvi partir para implementá-la através do swing…ela está quase funcionando…só que é justamente na hora de armazenar no vetor que estou me embolando…

Se liga… 8)

::Classe que eu achava que seria a única a ser feita…

[code]import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class AgendaEletronica extends JFrame {

private JLabel lblNome;
private JTextField txtNome;
private JLabel lblTelefone;
private JTextField txtTelefone;
private JButton btnAdicionar;
private JButton btnExcluir;
private JButton btnAtualizar;

//-------tela------
public AgendaEletronica(){
	
	lblNome=new JLabel("Nome: ");
	txtNome=new JTextField();
	lblTelefone=new JLabel("Telef.: ");
	txtTelefone=new JTextField();
	btnAdicionar=new JButton("Adicionar");
	btnExcluir=new JButton("Excluir");
	btnAtualizar=new JButton("Atualizar");
	
	
	getContentPane().setLayout(new FlowLayout());
	
	setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	setResizable(false);
	setSize(230,160);
	setLocationRelativeTo(null);
	setTitle("Agenda Eletrônica");
	
	getContentPane().add(lblNome);
	getContentPane().add(txtNome);
	getContentPane().add(lblTelefone);
	getContentPane().add(txtTelefone);
	getContentPane().add(btnAdicionar);
	getContentPane().add(btnExcluir);
	getContentPane().add(btnAtualizar);
	
	txtNome.setColumns(13);
	txtTelefone.setColumns(13);
	
	
	//------evento----
	btnAdicionar.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent ev){
		
			String n=txtNome.getText();
			String t=txtTelefone.getText();
			
	        System.out.println(n+" "+t);		
	        	
	       	dado[]=new Dados();
	       	dado[]=setNome(n);
	       	dado[]=setTelefone(t);
	       	
	       	dado[]=getNome(n);
	       	dado[]=getTelefone(t);
	       	
	       	System.out.println("Tirando do vetor temos:"+n+" "+t);
	
		}
		
	});
	
}
 
//-------------main----------
public static void main(String[] args) {
	
  	Dados[] dado = new Dados[10];
	
	
	
	
	new AgendaEletronica().setVisible(true);
}

}[/code]

::Classe que precisei fazer para completar… :cry:

[code]public class Dados {

private String nome;
private String telefone;


public void setNome(String nome){
	
	this.nome=nome;
}

public String getNome(){
	
	return this.nome;
}

public void setTelefone(String telefone){
	
	this.telefone=telefone;
}

public String getTelefone(){
	
	return this.telefone;
}

}[/code]

Alguém entendeu por que não está reconhece dado[]=new Dado() e as outras 4 linhas abaixo?

Eu não estou entendo como devo fazê-lo…por enquanto só estou tentando aramazenar os dados dentro do vetor e depois recuperá-los, assim eu vejo se está funcionando…

:lol: