Problemas com ArrayList

Pessoal estou problemas num ArrayList, já olhei o código várias vezes e não consegui ver o problema.

Se alguem puder ajudar agradeço, o problema deve estar saltando aos olhos eu sei, mas não consigo enxergar :roll: .

Essa é a minha classe TO.

[code]public class AlunoTO {
private String matricula;
private String nome;
private Date dataNascimento;
private ArrayList notas;
/**
* @return the dataNascimento
/
public Date getDataNascimento() {
return dataNascimento;
}
/
*
* @param dataNascimento the dataNascimento to set
/
public void setDataNascimento(Date dataNascimento) {
this.dataNascimento = dataNascimento;
}
/
*
* @return the matricula
/
public String getMatricula() {
return matricula;
}
/
*
* @param matricula the matricula to set
/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/
*
* @return the nome
*/

public String getNome() {
	return nome;
}
/**
 * @param nome the nome to set
 */

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

/**
 * 
 * @param nota
 */

public void addNota(Float nota){
	this.notas.add(nota);
}

}
[/code]

Essa é a minha classe View (Onde eu passo os parametros/Dados)

[code]public class View {

private Controller controller;
private Scanner input;


/*
 * metodo construtor da class view recebe como parametro uma instancia da classe controller.
 * É o primero a ser executado quando 
 * instanciamos a classe View.
 */

public View(Controller controller){
	this.controller = controller;
	input = new Scanner(System.in);
}

public void showMenu(){

// opcoes do menu

	System.out.println("\n\n");
	System.out.println("Sistema de Cadastro de Alunos");
	System.out.println("1 - Cadastrar Alunos");
	System.out.println("2 - Listar Alunos");
	System.out.println("3 - Sair");
	System.out.print("Informe sua opção");
	
	int opcao = input.nextInt();
	
	switch (opcao) {
		case 1:
			pegarDadosDoAluno();
		case 2:
			listarAlunos();
			
		break;

	default:
		sairDaAplicacao();
		break;
	}
	
}

/**
 * 
 * metodo para finalizar o sistema
 */

private void sairDaAplicacao() {
	System.out.println("Fim da Aplicação");
	System.exit(0);
	
}

public void pegarDadosDoAluno(){
	
	
	
	AlunoTO aluno = new AlunoTO();
	System.out.println("\n\n");
	System.out.println("------Cadastro de Aluno-----");
	
	System.out.print("Matrícula:");
	aluno.setMatricula(input.next()+input.nextLine());
	
	System.out.print("Nome:");
	aluno.setNome(input.next()+input.nextLine());
	
	System.out.print("Nota do B1:");
	aluno.addNota(input.nextFloat());
	
	System.out.print("Nota do B2:");
	aluno.addNota(input.nextFloat());
	
	System.out.print("Nota do B3:");
	aluno.addNota(input.nextFloat());
	
	System.out.print("Nota do B4:");
	aluno.addNota(input.nextFloat());
	
	SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");

	System.out.print("Data de Nascimento (DD/MM/AAAA): ");
	String dtNascimento = input.next()+input.nextLine();
	
	boolean dtNascIsNotOk = true;
		do{
			try {
					aluno.setDataNascimento(f.parse(dtNascimento));
					dtNascIsNotOk = false;
				} catch (ParseException e) {
					System.out.println("Data incorreta!");
					System.out.println("Informe Novamente (DD/MM/AAAA)");
					dtNascimento = input.next()+input.nextLine();
			}
		}while(dtNascIsNotOk);

// Envia o objeto aluno para o controller.
controller.cadastrarAluno(aluno);

// Chama o menu novamente.
showMenu();

}[/code]

// Metodo para listar os alunos Cadastrados.

[code] public void listarAlunos(){
ArrayList alunos = controller.getListAlunos();

	SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
	
	System.out.println("\n\n");
	System.out.println("--- Lista de Alunos ---");
		for (AlunoTO aluno : alunos) {
			System.out.println("Matricula: " + aluno.getMatricula());
			System.out.println("Nome: " + aluno.getNome());
			System.out.println("Nasc.: "+ f.format(aluno.getDataNascimento()));
			System.out.println("\n");
			System.out.println("--------------");
			System.out.println("\n");
		}
		
		showMenu();
}

}
[/code]

No console quando eu passo um float nele aparece essa mensagem:

Exception in thread “main” java.lang.NullPointerException
at mvc.model.AlunoTO.addNota(AlunoTO.java:56)
at mvc.view.View.pegarDadosDoAluno(View.java:89)
at mvc.view.View.showMenu(View.java:50)
at mvc.controller.Controller.iniApp(Controller.java:42)
at mvc.controller.Runner.main(Runner.java:14)

Estou vendo que seu atributo "private ArrayList notas; " não é instanciado.

[]'s

Oi,

o problema está no código this.notas.add(nota);

Provavelmente em nenhum momento a variavel Array notas fo instanciado.

Você deveria fazer.:

ArrayList notas = new ArrayList();

Tchauzin!

Boa Tarde,

É isso mesmo que vc quer, ou está faltando algo?

[quote] [code] switch (opcao) {
case 1:
pegarDadosDoAluno();

                 //FALTA UM BREAK AQUI, SENÃO VAI SAIR RASGANDO E FAZER O PRÓXIMO TB.

         case 2:  
             listarAlunos();  
               
         break;  

     default:  
         sairDaAplicacao();  
         break;  
     }[/code][/quote]

Fora o que o pessoal já lhe apontou, sempre use Double ou BigDecimal para fazer contas, não Float. Você vai ver que:
a) Double dá bem menos problemas com precisão em contas;
b) O tempo gasto para fazer contas com Double ou Float é exatamente o mesmo para processadores modernos (exceto quando você estiver usando JavaME, que costuma rodar em processadores que não têm ponto flutuante por hardware), então não se justifica usar Float por motivos de desempenho.

Valeu pessoal, era isso mesmo que estava faltando.

Grato. :stuck_out_tongue: